加入收藏 | 设为首页 | 会员中心 | 我要投稿 核心网 (https://www.hxwgxz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 教程 > 正文

Python数据可视化:Python大佬有哪些?

发布时间:2018-12-01 02:27:56 所属栏目:教程 来源:法纳斯特
导读:有态度地学习 之前讲了代理池以及Cookies的相关知识,这里针对搜狗搜索微信公众号文章的爬取,将它俩实践一下。 在崔大的书里面,他是用代理IP来应对搜狗的反爬措施,因为同一IP访问网页过于频繁,就会跳转验证码页面。 不过时代在进步,搜狗搜索的反爬也
副标题[/!--empirenews.page--]

有态度地学习

之前讲了代理池以及Cookies的相关知识,这里针对搜狗搜索微信公众号文章的爬取,将它俩实践一下。

在崔大的书里面,他是用代理IP来应对搜狗的反爬措施,因为同一IP访问网页过于频繁,就会跳转验证码页面。

不过时代在进步,搜狗搜索的反爬也在更新,现在它是IP加Cookies双重把关。

01 网页分析

Python数据可视化:Python大佬有哪些?

获取微信公众号文章信息,标题、开头、公众号、发布时间。

请求方式为GET,请求网址为红框部分,后面的信息没什么用。

02 反爬破解

Python数据可视化:Python大佬有哪些?

什么时候出现上图这种情况呢?

两种,一种同一个IP重复访问页面,另一种同一个Cookies重复访问页面。

两个都有,挂的更快!完整爬取我只成功了一次...

因为我最开始就是先什么都不设置,然后就出现验证码页面。然后用了代理IP,还是会跳转验证码页面,直到最后改变Cookies,才成功爬取。

01 代理IP设置

  1. def get_proxies(i): 
  2.     """ 
  3.     获取代理IP 
  4.     """ 
  5.     df = pd.read_csv('sg_effective_ip.csv', header=None, names=["proxy_type", "proxy_url"]) 
  6.     proxy_type = ["{}".format(i) for i in np.array(df['proxy_type'])] 
  7.     proxy_url = ["{}".format(i) for i in np.array(df['proxy_url'])] 
  8.     proxies = {proxy_type[i]: proxy_url[i]} 
  9.     return proxies 

代理的获取以及使用这里就不赘述了,前面的文章有提到,有兴趣的小伙伴可以自行去看看。

经过我两天的实践,免费IP确实没什么用,两下子就把我真实IP揪出来了。

02 Cookies设置

  1. def get_cookies_snuid(): 
  2.     """ 
  3.     获取SNUID值 
  4.     """ 
  5.     time.sleep(float(random.randint(2, 5))) 
  6.     url = "http://weixin.sogou.com/weixin?type=2&s_from=input&query=python&ie=utf8&_sug_=n&_sug_type_=" 
  7.     headers = {"Cookie": "ABTEST=你的参数;IPLOC=CN3301;SUID=你的参数;SUIR=你的参数"} 
  8.     # HEAD请求,请求资源的首部 
  9.     response = requests.head(url, headers=headers).headers 
  10.     result = re.findall('SNUID=(.*?); expires', response['Set-Cookie']) 
  11.     SNUID = result[0] 
  12.     return SNUID 

总的来说,Cookies的设置是整个反爬中最重要的,而其中的关键便是动态改变SNUID值。

这里就不详细说其中缘由,毕竟我也是在网上看大神的帖子才领悟到的,而且领悟的还很浅。

成功爬取100页就只有一次,75页,50页,甚至到最后一爬就挂的情况都出现了...

我可不想身陷「爬-反爬-反反爬」的泥潭之中,爬虫之后的事情才是我的真正目的,比如数据分析,数据可视化。

所以干票大的赶紧溜,只能膜拜搜狗工程师。

03 数据获取

1 构造请求头

  1. head = """ 
  2. Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8 
  3. Accept-Encoding:gzip, deflate 
  4. Accept-Language:zh-CN,zh;q=0.9 
  5. Connection:keep-alive 
  6. Host:weixin.sogou.com 
  7. Referer:'http://weixin.sogou.com/', 
  8. Upgrade-Insecure-Requests:1 
  9. User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36 
  10. """ 
  11.  
  12. # 不包含SNUID值 
  13. cookie = '你的Cookies' 
  14.  
  15. def str_to_dict(header): 
  16.     """ 
  17.     构造请求头,可以在不同函数里构造不同的请求头 
  18.     """ 
  19.     header_dict = {} 
  20.     header = header.split('n') 
  21.     for h in header: 
  22.         h = h.strip() 
  23.         if h: 
  24.             k, v = h.split(':', 1) 
  25.             header_dict[k] = v.strip() 
  26.     return header_dict 

(编辑:核心网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读