文章所有知识基本来自个人的学习整理
目录
准备工作
代码
结果展示
准备工作
准备好我们需要的库以及我们要爬取的网页url等基本信息
pip install requestspip install bs4
代码
本次演示我们选择了山东省菜价,来源于网络
读取多个页面数据时,可能会出现下面
AttributeError: 'NoneType' object has no attribute 'find_all' 的错误,我查阅了别人所说的解决办法,加了请求头headers之后还会出现的话,有可能是因为访问网站的时候出现了下面的验证情况
import requestsfrom bs4 import BeautifulSoupimport csvf=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].textplace=s[2].textprice=s[3].textkeep=s[4].textcsvwriter.writerow([date,product,place,price,keep])f.close()print('over!!')r.close()#最后关闭请求
结果展示