爬虫---Beautiful Soup 通过添加不同的IP请求

it2022-05-05  137

  上一篇爬虫写了如何应付反爬的一些策略也简单的举了根据UA的例子,今天写一篇如何根据不同IP进行访问豆瓣网获取排行版

 

requests添加IP代理

如果使用代理的话可以通过requests中的方法proxies

def request(method, url, **kwargs): """Constructs and sends a :class:`Request <Request>`. :param proxies: (optional) Dictionary mapping protocol to the URL of the proxy. 太多了,删除了一些留下了主要

会有人问,这么多代理去哪里找?小编百度了找了一些发现西刺代理挺好用的。

随便从里面找2个进行发请求

# coding:utf-8 import requests url = 'http://example.org' headers = { 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like G' 'ecko) Chrome/53.0.2785.104 Safari/537.36 Core/1.53.2372.400 QQBrowser/9.5.10548.400' } proxies = { 'http':'http://101.200.43.49:6000', 'https':'http://118.144.149.206:3128', } # 其他的方法书写 # proxies = {'http://101.200.43.49:6000':'http://118.144.149.206:3128'} r = requests.get(url,headers=headers,proxies=proxies) print(r.status_code) 代码结果: 200

 

通过代理抓取豆瓣网

1.通过requests请求地址:https://movie.douban.com/top250

2.添加代理IP

3.通过Beautiful Soup获取Html页面

4.进行分析Html页面,完成对导演,电影名称,评分的抓取

 代码结果:

import requests from bs4 import BeautifulSoup import re # 请求头 headers = { 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit' '/537.36 (KHTML, like Gecko) Chrome/53.0.2785.104 Safari/537.36 Core/1.53.2372.400 QQBrowser/9.5.10548.400' } # 添加代理 proxies = { 'http':'http://113.121.22.92:808',} r = requests.get(url,headers=headers,proxies=proxies) html = r.content.decode('utf-8') blog = BeautifulSoup(html,'html.parser') daoyan = blog.find_all('p',class_='') # 导演 titles = blog.find_all('div',class_='hd') # 电影名称 pingfen = blog.find_all('span',class_='rating_num') # 评分 for title,daoya, pingfe in zip(titles,daoyan,pingfen): m = title.get_text().split('\n')[2] x = daoya.get_text().strip() x1 = re.findall(r'导演: (.*?)\xa0',x) cc = pingfe.get_text() print(m) print(x1) print(cc)

代码执行完后发现只抓取了第一页的数据,而我们想要的时候全部数据,那么我们就继续分析URL路径

# 第一页的URL地址 https://movie.douban.com/top250 # 第二页的URL地址 https://movie.douban.com/top250?start=25&filter= # 第三页的URL地址 https://movie.douban.com/top250?start=50&filter=

经过观察我们可以发现后面唯一变得数据就是start,那么我们可以通过拼接URL获取全部数据,并且把这么数据写入到TXT文件中

import requests from bs4 import BeautifulSoup import re page = 0 base_url = 'https://movie.douban.com/top250?start=' # 通过循环拼接URL while page<10: url = base_url + str(25*page) page += 1 # 请求头 headers = { 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) ''/Chrome/53.0.2785.104 Safari/537.36 Core/1.53.2372.400 QQBrowser/9.5.10548.400' } # IP代理 proxies = { 'http':'http://113.121.22.92:808',} r = requests.get(url,headers=headers,proxies=proxies) html = r.content.decode('utf-8') blog = BeautifulSoup(html,'html.parser') daoyan = blog.find_all('p',class_='') # 导演 titles = blog.find_all('div',class_='hd') # 电影名称 pingfen = blog.find_all('span',class_='rating_num') # 评分 for title,daoya, pingfe in zip(titles,daoyan,pingfen): m = title.get_text().split('\n')[2] x = daoya.get_text().strip() x1 = re.findall(r'导演: (.*?)\xa0',x) cc = pingfe.get_text() # 写入到txt文件中 with open('123.txt','a+',encoding='utf-8')as f : f.write('{m}\t{x1}\t{cc}\n'.format(m=m,x1=x1,cc=cc))

通过查看TXT文件,发现已经成功的获取到了豆瓣网的电影信息。

 

 

这个案例只是简单的表达我们可以通过IP代理的方式进行来完成爬虫(当然不用代理一样可以请求成功,只是简单的表达下思想,思想学会了,其他的都是简单的问题了)

以后我们如果遇到了封IP的网站都可以通过添加IP代理的方式进行爬取数据;

 

如果感觉安静写的内容对你有帮助,请点击个关注,内容持续更新中~~~~~

转载于:https://www.cnblogs.com/qican/p/11177845.html


最新回复(0)