文章所有知识基本来自个人的学习整理
目录
准备工作
准备好我们需要的库以及我们要爬取的网页url等基本信息
pip install requests
pip install bs4
代码
本次演示我们选择了山东省菜价,来源于网络
读取多个页面数据时,可能会出现下面
AttributeError: 'NoneType' object has no attribute 'find_all' 的错误,我查阅了别人所说的解决办法,加了请求头headers之后还会出现的话,有可能是因为访问网站的时候出现了下面的验证情况
import requests
from bs4 import BeautifulSoup
import csv
f=open('菜价.csv',mode='w')
csvwriter=csv.writer(f)
#通过观察url我们可以发现,翻页时url的变化与页码相符合,因此通过for循环可以同时爬取多页数据
for i in range(3):
url='https://www.cnhnb.com/hangqing/cdlist-2003192-0-0-0-0-'+str(i)+'/'
r=requests.get(url,verify=False,headers={'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36'})
r.encoding='utf-8'
tt=r.text#获取需要的源代码
page=BeautifulSoup(tt,'html.parser')
content=page.find('div',attrs={'class':"quotation-content"})
samples=content.find_all('li',attrs={'class':"market-list-item"})#使用attrs,避免使用class产生关键字冲突
for sample in samples:
s=sample.find_all('span')
date=s[0].text#这是html中的内容,用于获取标签里面的内容
product=s[1].text
place=s[2].text
price=s[3].text
keep=s[4].text
csvwriter.writerow([date,product,place,price,keep])
f.close()
print('over!!')
r.close()#最后关闭请求
结果展示