題記
今天上午看大佬文章又學到新東西了,這是是關於爬蟲的,我感覺我已經會爬任何東西了(驕傲臉)。本來打算爬個代理ip試試水,半路突發奇想說書人那個驗證ip的腳本,於是就一起來吧,我這比說書人那個簡陋一些。我把我的腳本起名為上天入地無敵簡單又看似很好的代理ip神經病腳本。感謝那個大佬寫的文章讓我接觸到xpath helper插件,誰用誰知道。
正文
看完文章首先我安裝了個xpath helper插件(商店一搜就有),他寫的edusrc的爬取內容,我為了變通想起來前幾天看到一個高匿代理的網站,於是嘗試爬爬這個網站。
1 確定要爬的數據
點插件會彈個框,然后我們按住shift+x選擇我們心怡的數據,這里我選擇ip,多選幾個查看變化,可以看到tr管行變化,td管列變化。



我們取值的時候這么取_element.xpath("//tbody/tr[" + str(k) + "]/td[1]/text()"),看到變化沒刪掉前面無用的,最后要多加一個/,要不獲取不到數據。


2 編寫腳本思路
我們的思路是把ip和端口獲取到並且用:鏈接起來存到ip.txt文件,然后驗證爬取的ip是否能用,把能用的存在ok.txt文件中。
http://ip.jiangxianli.com/?page=1這個網站page后控制頁數。
3 效果截圖
1、爬取頁數設置

2、爬取完開始驗證代理是否可用,我輸的6頁爬了90個ip。


3、驗證成功的存到ok.txt,一般來說國內的快,如果想看哪個是國內的,就復制可用ip搜索一下,前面有ip帶國籍的。


4 完整代碼
from lxml import etree import urllib3 import requests #爬取ip def school(i, k): manager = urllib3.PoolManager() http = manager print("第"+str(i)+"頁") r = http.request( 'GET', "https://ip.jiangxianli.com/?page=" + str(i), headers={ 'User-Agent': "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:88.0) Gecko/20100101 Firefox/88.0", 'Host': "ip.jiangxianli.com", 'Cookie': "PSTM=1607346916; BIDUPSID=69AFB78A1A2E7FC19402DB7E41C448A8; BAIDUID=0A9A83EB086E30AD2E7AE714FAEF98A8:FG=1; __yjs_duid=1_b16d973dfef393feee90346dbe82f0d51619579133037; BDORZ=FFFB88E999055A3F8A630C64834BD6D0; ab_sr=1.0.0_MTU2NjJhNzIwOWMzM2EyNjM4NmZhOGNhOWQxYzI5YTAwZDQ1MmI3M2Y0NjE0NTY5MmJjMjFhMTQ5ODIzNzU2NzVhM2FlYTg4OWQ1OGNjYzI0YjQ4ODIwM2ExYWQ0OGQz; BDRCVFR[CfxpvPKvC2b]=mk3SLVN4HKm; delPer=0; PSINO=1; BDUSS=cweXRYaUlCSklGWFBoeG5VS3QyZERZdEpMYUR4Y1pjeW50ZWdhZm53MndoYjFnRUFBQUFBJCQAAAAAAAAAAAEAAABlbIWtstDR9LK7wM~QxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALD4lWCw-JVgQj; BDUSS_BFESS=cweXRYaUlCSklGWFBoeG5VS3QyZERZdEpMYUR4Y1pjeW50ZWdhZm53MndoYjFnRUFBQUFBJCQAAAAAAAAAAAEAAABlbIWtstDR9LK7wM~QxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALD4lWCw-JVgQj; BDRCVFR[pNjdDcNFITf]=mk3SLVN4HKm; H_PS_PSSID=33985_33966_31254_34004_33759_33675_33607_26350_33996; BA_HECTOR=a48g810h8k810124f01g9bvg30r" }, timeout=4.0 ) html = r.data.decode('utf-8', 'ignore') _element = etree.HTML(html) text = _element.xpath("//tbody/tr[" + str(k) + "]/td[1]/text()") port = _element.xpath("//tbody/tr[" + str(k) + "]/td[2]/text()") coun = _element.xpath("//tbody/tr[" + str(k) + "]/td[6]/text()") su = _element.xpath("//tbody/tr[" + str(k) + "]/td[8]/text()") ipdata = '\n'.join(text) port2 = '\n'.join(port) coun2 = '\n'.join(coun) su2 = '\n'.join(su) ipt=ipdata+":"+str(port2) ipo=ipdata+":"+str(port2)+"---------->"+coun2+"---------->"+su2 print(ipo) return ipt #檢測代理是否可用 def check_proxy(): for ip in open('ip.txt'): ip_port = ip.replace('\n', '') proxy = { 'https': ip_port } headers = { 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_16_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36' } try: r = requests.get('http://www.baidu.com', headers=headers, proxies=proxy, timeout=3) if r.status_code == 200: print(ip_port+'----驗證成功') with open(r'ok.txt', 'a+', encoding='utf-8') as a: a.write(ip_port + '\n') a.close() except: print(ip_port+'----超時') #介紹 def title(): print('+------------------------------------------') print('+ \033[1;34m所有數據來源:https://ip.jiangxianli.com \033[0m') print('+ \033[1;34mTitle: ip代理驗證v1.0 \033[0m') print('+ \033[1;36m使用格式: python3 ipdaili.py \033[0m') print('+ \033[1;36m作者By >>> 11陽光 \033[0m') print('+ \033[1;33m座右銘:不是傑出者才做夢,而是善夢者才傑出。\033[0m') print('+------------------------------------------') #主函數 if __name__ == '__main__': title() page=str(input("\033[1;35m請輸入你想爬的頁數,一頁15個ip,爬取的ip會存在ip.txt里面\npage >>> \033[0m")) for i in range(1, int(page)+1): for k in range(1, 16): text2=school(i,k) print(text2) with open(r'ip.txt','a+',encoding='utf-8') as f: f.write(text2+'\n') f.close() print('+ \033[1;33mip爬取完畢,下面將進行驗證是否可用,可用的將被放在ok.txt,祝您旅途愉快!\033[0m') check_proxy() print('+ \033[1;33m完畢,快去ok.txt查看吧\033[0m')
參考文章
利用xpath爬取edu漏洞列表:http://0dayhack.net/index.php/1979/
說書人的腳本
