這兩日又撿起了許久不碰的爬蟲知識,原因是親友在朋友圈拉人投票,點進去一看發現不用登陸或注冊,覺得並不復雜,就一時技癢搞一搞,看看自己的知識都忘到啥樣了。
分析一看,其實就是個post請求,需要的信息都在網頁中,唯一的問題就是網站做了IP限制,一個IP只能投一票。
在GitHub上看到了star最高的代理IP池項目,但是由於大佬爬取的代理沒有區分http和https,所以使用起來可用率就進一步降低了。
大概看了一下大家經常爬取代理ip的網址,有一個是專門列出的HTTP類型的代理,稍微分析了一下頁面,靠着自己快忘完了的知識,寫了一個極簡的爬取方案。代碼如下:
import requests
from bs4 import BeautifulSoup
def proxy_list():
url = 'https://www.xicidaili.com/wt'
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36'}
r = requests.get(url = url,headers = headers)
s = BeautifulSoup(r.text,'lxml')
tr_list = s.select('tr[class="odd"]')
proxy_list = []
for tr in tr_list:
ip = tr.select('td')[1].text
potal = tr.select('td')[2].text
proxy_list.append('http://'+ip+':'+potal)
return proxy_list
該網站只做了ua限制,不加ua是會503的,加上ua即可。當然爬取下來的也不是都可以使用,需要做進一步驗證才行。
分頁功能就不用多說了,較為簡單,可以自行DIY。不得不說,requests+BeautifulSoup真好用,入門必備。