爬取内容
1.导入包、库
import requests
from bs4 import BeautifulSoup
2.定义请求头
右键->>检查->>网络(network)->>F5刷新->>选名称第一个->>右边找到user-agent
headers = {
"user-agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36",
}
3.定义url
一共有七千多页的内容,所以获取每页的url是关键。
得到每页的url,找规律:
https://www.autohome.com.cn/news/1/#liststart
https://www.autohome.com.cn/news/2/#liststart
https://www.autohome.com.cn/news/3/#liststart
获取每页的url(以前4页为例):
urls = []
for i in range(1,5):
url = 'https://www.autohome.com.cn/news/{}/#liststart'.format(i)
urls.append(url)
4.分析html页面,用bs4得到我们想要的信息
每一页所有的新闻在ul标签下,而每一条新闻都在一个li标签下;
新闻标题title在h3标签下;
发布时间time在span标签下;
发布简介profile在p标。
以上这些子标签都是在div标签下,先获得div标签:div标签较多,所以带上我们所需的标签属性class。 注意:class在python里是关键字,要想表达class属性,必须写为:class_
divs = soup.find_all('div',class_="article-wrapper")
下面我们就能获取每个信息了:
titles = div.find_all('h3')
times = list(div.find_all('span',class_="fn-left"))
profiles = list(div.find_all('p'))
5.遍历url,提取数据
解析器的选择:lxml HTML解析器 原因:1.速度快;2.文档容错能力强
news = []
for url in urls:
try:
response = requests.get(url,headers=headers)
content = response.content.decode('gbk')
#实例化一个BeautifulSoup对象
soup = BeautifulSoup(content,'lxml')
divs = soup.find_all('div',class_="article-wrapper")
for div in divs:
titles = div.find_all('h3')
times = list(div.find_all('span',class_="fn-left"))
profiles = list(div.find_all('p'))
for title,time,profile in zip(titles,times,profiles):
title = title.string
time = time.string
profile = profile.string
car_news = {
"title":title,
"time":time,
"profile":profile,
}
news.append(car_news)
except:
continue
这样我们就可以通过bs4获取到我们想要的信息了。