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

  上一篇爬虫写了如何应付反爬的一些策略也简单的举了根据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.

太多了,删除了一些留下了主要

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

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

# coding:utf-8
import requests
url ="http://httpbin.org/get"
proxy = '117.191.11.73:80'
proxies = {
    'http':'http://'+proxy,
    'https':'https://'+ proxy
           }
r  =requests.get(url,proxies=proxies)
print(r.text)


代码结果:
{
  "args": {}, 
  "headers": {
    "Accept": "*/*", 
    "Accept-Encoding": "gzip, deflate", 
    "Host": "httpbin.org", 
    "User-Agent": "python-requests/2.21.0", 
    "X-Via": "Cache-363"
  }, 
  "origin": "117.191.11.73, 117.191.11.73", 
  "url": "https://httpbin.org/get"
}

 

 

通过代理抓取豆瓣网

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代理的方式进行爬取数据;

 

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

posted @ 2019-07-15 13:57  测试-安静  阅读(997)  评论(0编辑  收藏  举报