爬虫---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.太多了,刪除了一些留下了主要會有人問,這么多代理去哪里找?小編百度了找了一些發現西刺代理挺好用的。
隨便從里面找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
總結
以上是生活随笔為你收集整理的爬虫---Beautiful Soup 通过添加不同的IP请求的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 学妹问我,并发问题的根源到底是什么?
- 下一篇: leetcode-买卖股票的最佳时机④*