工商注册网站,wordpress 文章作者,企业培训,中国建材工程建设协会网站关于请求头headers: 值得注意的是#xff0c;与上一篇 #xff1a;【python爬虫实战】爬取书店网站的 书名价格#xff08;注释详解#xff09;-CSDN博客
爬取书名不同#xff0c;这次爬取豆瓣网站必须使用“请求头headers”#xff0c;不然将没有输…关于请求头headers: 值得注意的是与上一篇 【python爬虫实战】爬取书店网站的 书名价格注释详解-CSDN博客
爬取书名不同这次爬取豆瓣网站必须使用“请求头headers”不然将没有输出结果。至于说背后原因笔者推测是豆瓣网站有“反爬虫”机制而指定headers可以模拟普通的人为浏览器访问 从而避开阻拦
//ps每个人的headers应该不同至于说如何获得自己的headers可以参考b站视频这里不再赘述~
关于从多个不同页面爬取
观察豆瓣网站可以发现每个页面只展示了25个top250分布在不同的10个页面中要在一个程序中访问十个页面需要获得十个对应的不同的网址
而观察不同网址不难发现它们大体上是相同的只有部分数字呈现规律性的变化由此则采用如下方式更新网址 list_ [i for i in range(0, 226) if i%25 0]#获取02550...for start_num in list_:# 发送请求并获取响应内容 response requests.get(fhttps://movie.douban.com/top250?start{start_num}filter, headersheaders)
完整代码见下
#! usr/bin/env python
from bs4 import BeautifulSoup
import requests if __name__ __main__:# 设置请求头模拟浏览器访问因为豆瓣的网站应该是有反爬虫机制所以必须指定headers来模拟普通的人为浏览器访问 headers { User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3 } #headers 要用字典的方式来写try: list_ [i for i in range(0, 226) if i%25 0]i 1for start_num in list_:# 发送请求并获取响应内容 response requests.get(fhttps://movie.douban.com/top250?start{start_num}filter, headersheaders) response.raise_for_status() # 如果请求失败抛出异常 soup BeautifulSoup(response.text, html.parser) titles soup.find_all(span, attrs{class: title}) for title in titles: #外文原名中会含有/ 利用if语句排除之从而只留下中文名if / not in title.string:print(i, ., title.string) i 1 except requests.RequestException as e: print(f发生网络错误{e})
在vs code中运行可实现如下输出
~ 希望对你有帮助 ~