python爬蟲實戰(三)--------搜狗微信文章(IP代理池和用戶代理池設定----scrapy)


在學習scrapy爬蟲框架中,肯定會涉及到IP代理池和User-Agent池的設定,規避網站的反爬。

這兩天在看一個關於搜狗微信文章爬取的視頻,里面有講到ip代理池和用戶代理池,在此結合自身的所了解的知識,做一下總結筆記,方便以后借鑒。

筆記

一.反爬蟲機制處理思路:

  1. 瀏覽器偽裝、用戶代理池;
  2. IP限制--------IP代理池;
  3. ajax、js異步-------抓包;
  4. 驗證碼-------打碼平台。

二.散點知識:

  1. def process_request(): #處理請求
      request.meta["proxy"]=.... #添加代理ip
  2. scrapy中如果請求2次就會放棄,說明該代理ip不行。

實戰操作

相關代碼已經調試成功----2017-4-4

目標網址http://weixin.sogou.com/weixin?type=2&query=python&ie=utf8

實現:關於python文章的抓取,抓取標題、標題鏈接、描述。如下圖所示。

數據:數據我就沒有保存,此實戰主要是為了學習IP和用戶代理池的設定,推薦一個開源項目關於搜狗微信公眾號:基於搜狗微信的公眾號文章爬蟲

圖1

 在這里貼出設置IP和用戶代理池的代碼,完整代碼請移步我的github:https://github.com/pujinxiao/weixin

 1.middlewares.py主要代碼

 1 # -*- coding: utf-8 -*-
 2 import random
 3 from scrapy.downloadermiddlewares.httpproxy import HttpProxyMiddleware #代理ip,這是固定的導入
 4 from scrapy.downloadermiddlewares.useragent import UserAgentMiddleware #代理UA,固定導入
 5 class IPPOOLS(HttpProxyMiddleware):
 6     def __init__(self,ip=''):
 7         '''初始化'''
 8         self.ip=ip
 9     def process_request(self, request, spider):
10         '''使用代理ip,隨機選用'''
11         ip=random.choice(self.ip_pools) #隨機選擇一個ip
12         print '當前使用的IP是'+ip['ip']
13         try:
14             request.meta["proxy"]="http://"+ip['ip']
15         except Exception,e:
16             print e
17             pass
18     ip_pools=[
19         {'ip': '124.65.238.166:80'},
20         # {'ip':''},
21     ]
22 class UAPOOLS(UserAgentMiddleware):
23     def __init__(self,user_agent=''):
24         self.user_agent=user_agent
25     def process_request(self, request, spider):
26         '''使用代理UA,隨機選用'''
27         ua=random.choice(self.user_agent_pools)
28         print '當前使用的user-agent是'+ua
29         try:
30             request.headers.setdefault('User-Agent',ua)
31         except Exception,e:
32             print e
33             pass
34     user_agent_pools=[
35         'Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1062.0 Safari/536.3',
36         'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1063.0 Safari/536.3',
37         'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36',
38     ]

2.setting.py主要代碼

1 DOWNLOADER_MIDDLEWARES = {
2     'scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware':123,
3     'weixin.middlewares.IPPOOLS':124,
4     'scrapy.downloadermiddlewares.useragent.UserAgentMiddleware' : 125,
5     'weixin.middlewares.UAPOOLS':126
6 }

作者:今孝
出處:http://www.cnblogs.com/jinxiao-pu/p/6665180.html
本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM