python爬虫-BeautifulSoup4的使用
BeautifulSoup4
BeautifulSoup4 - 根据响应结果解析页面,提取数据 首先需下载:BeautifulSoup4,requests
注意:因为BeautifulSoup是被封装在bs4里面的,所以我们需要从bs4引入模块
下面我们一起来使用 BeautifulSoup + requests 爬取中国新闻网来实践一下
from bs4 import BeautifulSoup import requests
user-agent怎样获取的这里我就不多说了,大家应该都知道哈,下面接着来
URL = fhttps://www.chinanews.com.cn/scroll-news/news1.html # headers = {} --> 字典 # headers是给爬虫提供伪装的 # User-Agent --> 将爬虫伪装成游览器 Headers = { User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36, } response = requests.get(url=URL, headers=Headers)
response.status_codes:是请求页面后返回来的状态码
# 这里我们对比页面返回的状态码是否等于200 if response.status.code == 200: # 请求成功后,我们可以打印页面源码是否正常 # print(response.text) # 如果出现乱码可查看网页charset是哪种编码格式,这里的我看了是utf-8 response.encoding = utf-8
BeautifulSoup(源码, 解析器) - 将字符串类型的源代码转换为bs4类型 bs模块提供了一系列提取数据的方法,这些方法的操作对象的bs4类型的数据
soup = BeautifulSoup(response.text, html.parer ) select:根据css选择器(标签,class,id等)定位数据, 得到的是符合这个选择器的所有结果(整体是一个列表, 每一个元素是bs4类型的数据) select_one:根据css选择器(标签,class,id等)定位数据, 得到的是符合这个选择器的一个结果(是一个bs4类型的数据) li_list = soup.select(body > div.w1280.mt20 > .content-left > .content_list > ul > li) for i in li_list: text:从bs4类型中提取标签内的内容,结果为str attrs:从bs4类型数据中提取标签内容属性值 if i.select_one(li > div.dd_lm > a) != None: new_type = i.select_one(li > div.dd_lm > a).text # print(new_type) new_title = i.select_one(li > div.dd_bt > a).text # print(new_title) new_href = https://www.chinanews.com.cn + i.select_one(li > div.dd_bt > a).attrs[href] # print(new_href) new_time = i.select_one(li > div.dd_time).text
由于这个新闻网有10页那么我们就需要将page进行变换,只需要放进循环即可
下面是全部代码:
import csv import requests from bs4 import BeautifulSoup news_list = [] for page in range(1, 11): print(f-----------第{ page}页-------------) URL = fhttps://www.chinanews.com.cn/scroll-news/news{ page}.html Headers = { User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36, } response = requests.get(url=URL, headers=Headers) if response.status_code == 200: response.encoding = utf-8 soup = BeautifulSoup(response.text, "html.parser") li_list = soup.select(body > div.w1280.mt20 > .content-left > .content_list > ul > li) for i in li_list: if i.select_one(li > div.dd_lm > a) != None: new_type = i.select_one(li > div.dd_lm > a).text # print(new_type) new_title = i.select_one(li > div.dd_bt > a).text # print(new_title) new_href = https://www.chinanews.com.cn + i.select_one(li > div.dd_bt > a).attrs[href] # print(new_href) new_time = i.select_one(li > div.dd_time).text # print(new_time) lin = [new_type, new_title, new_href, new_time] print(lin)
运行结果如下: :到这里就结束了,大家可以把爬取出来的数据保存到本地文件里,在下一章节我将为大家讲解如何保存将数据保存到本地文件