开往未来的列车|Python爬虫快速入门,静态网页爬取( 五 )


for item in items:name = ''.join(item.text.split())link = item['href']print(name, link)1234这样结果就可以正常显示啦 。
四、爬取所有Top250图书可能你已经发现了 , 我们之前爬取的图书仅仅是第一页的 , 并不是所有的Top250图书 , 那么如何爬取所有的呢?
我们进入第二页后 , 可以看到网址变成了?start=25 , 相比原来多了个?start=25 。
我们再进入第一页 , 会发现网址变成了?start=0 。 之后 , 再进入最后一页 , 网址变成了?start=225 。
我想你应该已经找到了其中的规律 。
很显然 , "start="后面的数字总是以步长25进行递增 , 第一页此数字是0 , 第十页此数字是225 , 这让我们联想到了循环 。
我们先把之前爬取图书的代码封装成一个函数:
def spider(url):headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.125 Safari/537.36'}re = requests.get(url, headers=headers)soup = BeautifulSoup(re.text, 'html.parser')items = soup.select('div.pl2 a')for item in items:name = item['title']link = item['href']print(name, link)1234567891011豆瓣图书Top250共有十页 , 我们根据之前找出来的规律 , 利用循环生成这十个网页地址:
for i in range(0, 250, 25):douban_book = '?start=%s' % str(i)12之后 , 将它们组装在一起 , 我们就可以爬取所有图书了:
import requestsfrom bs4 import BeautifulSoupdef spider(url):headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.125 Safari/537.36'}re = requests.get(url, headers=headers)soup = BeautifulSoup(re.text, 'html.parser')items = soup.select('div.pl2 a')for item in items:name = item['title']link = item['href']print(name, link)for i in range(0, 250, 25):douban_book = '?start=%s' % str(i)spider(douban_book)1234567891011121314151617181920但考虑到输出结果太长 , 不方便在终端查看 , 我们可以将爬取到的结果写入文件:
import requestsfrom bs4 import BeautifulSoupdef spider(url, filename):headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.125 Safari/537.36'}re = requests.get(url, headers=headers)soup = BeautifulSoup(re.text, 'html.parser')items = soup.select('div.pl2 a')with open(filename, 'a', encoding=re.encoding) as f:for item in items:line = item['title'] + " " + item['href'] + "\n"f.write(line)for i in range(0, 250, 25):douban_book = '?start=%s' % str(i)spider(douban_book, 'doubanTop250.txt')1234567891011121314151617181920效果:
开往未来的列车|Python爬虫快速入门,静态网页爬取五、防BAN策略爬虫在网页上爬取数据时如果不加任何限制会“高速”访问对方的服务器 , 如果访问太快容易导致被对方服务器封禁 , 因为正常人是不会在1秒内访问几十次甚至上百次网站的 , 这样就会导致我们在一段时间内无法访问这个网站 。 所以 , 如果你访问过于频繁 , 即使通过修改User-Agent伪装成浏览器 , 也还是会被识别出爬虫 , 并限制你的IP访问该网站 。
那么如何防止自己被封禁呢?这里介绍两种策略 , 一种是降低自己的爬取速度 , 另一种是IP代理 。