Python Crawler – 網信貸黑名單數(shù)據(jù)爬取
網信貸黑名單網站截圖:
真實數(shù)據(jù)截圖:
我這里想爬取這些個人的信息,但是有些內容是需要登陸才可以查看的,所以先去注冊了一個賬號。
登陸進來后得到的內容是完整的:
(PS:這里就不激活郵箱了)
– 結構分析&代碼編寫
這些被黑名單的人信息是首頁點入進去的,對比下:
- <tr onclick="localHref('jgp94CtrsB')" class="pointer">
點開后的鏈接是:
acklist-jgp94CtrsB.html
相信大家一眼就看出來了規(guī)律吧,顯示的HTML代碼中有鏈接特征。
根據(jù)鏈接的規(guī)則我們可以寫出這樣一段python代碼:
- target_url = 'https://*.cc' #設置url
- r = requests.get(target_url) #訪問url
- html = r.text#獲取html代碼
- h = r"localHref(\'(.*?)\')" #正則代碼
- h_re = re.compile(h) #生成正則
- href_all = h_re.findall(html) #正則匹配出鏈接特征
- for i in href_all: #匹配出來的鏈接特征需要用for遍歷
- url = 'https://*.cc/blacklist-' + i + '.html' #遍歷出來組合成url
現(xiàn)在我要獲取的是“姓名、身份證、手機號、微信、支付寶”,這里我使用的是XPATH來獲取這些數(shù)據(jù),因為這樣更簡單一些。
大概的來了解下XPATH的語法吧:
這里完全可以使用更快速的方法:
直接使用Firebug或者其它瀏覽器的Copy XPath:
得到的XPath語法:
- /html/body/div[2]/div/div/h2
我們要獲取的名字是h2標簽內的所以直接修改成:
- /html/body/div[2]/div/div/h2/text()
直接上Python代碼:
(注:from lxml import etree 是支持XPath語法的庫)
可以看到輸出的結果是unicode編碼 ,直接解碼就顯示了:
其他的XPath代碼:
- sfzOBJ = htmlOBJ.xpath('//h3[@class="margin_top_15"]/span[@class="inline"]/i[1]/text()') #身份證
- phoneOBJ = htmlOBJ.xpath('//*[@id="body"]/div/div/h3[1]/span[2]/i/text()') #手機號
- wechatOBJ = htmlOBJ.xpath('//*[@id="body"]/div/div/div[3]/span[1]/text()') #微信
- alipayOBJ = htmlOBJ.xpath('//*[@id="body"]/div/div/div[3]/span[2]/text()') #支付寶
這里要記得加上登陸的Cookie去訪問哦:
1.在控制臺輸入document.cookie獲取Cookie
2.帶上Cookie請求訪問
- geturl = requests.get(url,headers={'Cookie':'__cfduid=d8b7bef3c3b678161d9fe747ccb651cea1499931877; PHPSESSID=mp6oh6j7o03hqd42n06r9p2bii;
- AJSTAT_ok_pages=5; AJSTAT_ok_times=1; _ga=GA1.2.1572452184.1499931870; _gid=GA1.2.2100292624.1499931870'})
– 最后
核心的代碼都寫好了,其他的就是結構的梳理,完善代碼:
- import requests,re
- from requests.packages.urllib3.exceptions import InsecureRequestWarning
- requests.packages.urllib3.disable_warnings(InsecureRequestWarning)
- from lxml import etree
- target_url = 'https://www.xinyongheimingdan.cc/'
- cookie = '你的cookie'
- r = requests.get(target_url,headers={
- 'Cookie':cookie
- })
- html = r.text
- h = r"localHref\(\'(.*?)\'\)"
- h_re = re.compile(h)
- href_all = h_re.findall(html)
- for i in href_all:
- url = 'https://www.xinyongheimingdan.cc/blacklist-' + i + '.html'
- geturl = requests.get(url,headers={
- 'Cookie':cookie
- })
- urlHTML = geturl.text.encode("utf-8")
- htmlOBJ = etree.HTML(urlHTML)
- nameOBJ = htmlOBJ.xpath('/html/body/div[2]/div/div/h2/text()')
- sfzOBJ = htmlOBJ.xpath('//h3[@class="margin_top_15"]/span[@class="inline"]/i[1]/text()')
- phoneOBJ = htmlOBJ.xpath('//*[@id="body"]/div/div/h3[1]/span[2]/i/text()')
- wechatOBJ = htmlOBJ.xpath('//*[@id="body"]/div/div/div[3]/span[1]/text()')
- alipayOBJ = htmlOBJ.xpath('//*[@id="body"]/div/div/div[3]/span[2]/text()')
- all_info = nameOBJ,sfzOBJ,phoneOBJ,wechatOBJ,alipayOBJ
- print all_info
成果: