爬取有驗證碼的網站,(爬之前最好看一下君子協定)robots.txt,以人人網為例,每爬100條資料需要驗證一次(需要自己購買一個驗證碼破解會員,不是很貴,我這裡選擇的是超級鷹),簡版
阿新 • • 發佈:2018-12-15
#!/usr/bin/env python # -*- coding: utf-8 -*- # @Time : 2018/10/15 14:03 # @Author : zhangz # @File : day4_yanzhengma.py # @Software: PyCharm import requests from lxml import etree import chaojiying as cj #採集人人網 id=966723459 url='http://www.renren.com/'+str(id)+'/profile?portal=homeFootprint&ref=home_footprint' cookie={'t':'8a9a0c45f5434d8de1d4fc34e9260bfa3'} with requests.Session() as s: s.cookies.update(cookie) # #判斷是否為驗證碼的頁面 # 如果不是,正常的解析 # 如果是 # 拿到驗證碼 html = etree.HTML(s.get(url).text) title=str(html.xpath('//title/text()')) if '驗證碼' in title: url_code='http://icode.renren.com/getcode.do?t=ninki&rnd=1531726003146' #拿到驗證碼圖片的二進位制流 im=s.get(url_code).content #給打碼平臺進行破解,拿到驗證碼 code=cj.get_code(im) url_validate='http://www.renren.com/validateuser.do' data={ 'id':'xxxx', 'icode':code, 'submit': '繼續瀏覽', 'requestToken': 'xxxxx', '_rtk': 'xxxx', } s.post(url=url_validate,data=data) print('-----------------------------------------------') else: print(html.xpath('//title/text()'),html.xpath('//li[@class="school"]/span/text()'),set(html.xpath('//a/@namecard')))