python爬虫——bs4
1.环境安装:bs4,lxml
2.导包:
- from bs4 import BeautifulSoup
- import lxml
3.实例化
- 通过本地的html文件进行初始化
fp = open(‘文件名’, ‘r’’, encoding = ‘’)
soup = BeautifulSoup(fp, ‘lxml’) - 通过网页上的源代码初始化
page_text = response.text
soup = BeautifulSoup(page_text, ‘lxml’)
4.BeautifulSoup各种方法解析
- soup.tagName(tagName为标签名,如div)得到文档中第一次出现的tagName所对应的标签
- soup.find():
soup.find(‘tagNane’)等同于soup.tagName.
soup.find(‘tagName’, class_/div = ‘属性值’)可进行属性定位
soup.find_all(‘tagName’)返回符合要求的所有标签(列表) - 选择器:select(返回列表)
soup.select(‘某种选择器(id,class…)’)
层级选择器:
soup.select(’,/tang > ul > li > a’)返回列表(,tang 即为 class = ‘tang’)
等同于soup.select(’,/tang > ul a’)空格表示多个层级
5.获取标签中的文本数据
- soup.a.text/string/get_text() (a为标签)
text和get_text()可以获取某一个标签中所有的文本内容,即可以获取其子标签的文本内容
string只能获取其标签直系的文本内容,不能获取其子标签的文本内容 - 获取标签中的属性值
soup.a[‘tagName’]
from bs4 import BeautifulSoup
import requests
if __name__ == '__main__':
url = 'https://www.shicimingju.com/book/sanguoyanyi.html'
#UA伪装
headers = {
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.83 Safari/537.36'
}
page_text = requests.get(url=url, headers=headers).text
#实例化BeautifulSoup
soup = BeautifulSoup(page_text, 'lxml')
#定位到li标签
list_li = soup.select('.book-mulu li')
fp = open('./response/sanguo.txt', 'w', encoding='utf-8')
for li in list_li:
#得到文章标题
title = li.a.string
#得到文章所在的url
detail_url = 'https://www.shicimingju.com' + li.a['href']
#得到文章页面
detail_page_text = requests.get(url=detail_url, headers=headers).text
#实例化url
detail_soup = BeautifulSoup(detail_page_text, 'lxml')
#定位到class = chapter_content内容
detail_tag = detail_soup.find('div', class_='chapter_content')
#得到文章内容
content = detail_tag.text
#写入文件
fp.write(title + ':' + content + '\n')
print(title, '下载成功')
print('over')
fp.close()