项目目标
通过爬虫获取“西拉代理”(http://www.xiladaili.com)上的高匿代理,并储存至一个列表。
项目分析
首先对网页进行观察,主体内容如下图所示。
不但指明了代理IP、协议类型,还有存活时间、打分这些数据。有需要的朋友,可以根据存活时间、打分来有选择性地挑选一些代理,这样获得的代理更加稳定。我仅展示最朴素的方法,即爬取网页上的所有代理。
网页下方有翻页按钮,点击不同页码,可以看到网页url也是非常有规律地在变动。
一看到这么规整的数据展示,就想到了表格。我们打开浏览器的开发者模式,定位到这一片数据的源代码。可以看到的所有的数据都藏在名为tbody节点中。
整个项目的思路大致有了,大体有以下三个步骤:
①访问相关页面,读取网页源代码;
②在网页源代码中定位到tbody,从中提取每一行的IP等数据;
③保存至列表中。
在代码实现阶段,我们用selenium模拟浏览器的访问,用BeautifulSoup来解析网页源代码。
from selenium import webdriver
import numpy as np
from bs4 import BeautifulSoup
def getFreeProxy(url):
browser = webdriver.Chrome(executable_path="chromedriver.exe")
pageNumber = np.random.choice(300) + 1
browser.get(url + str(pageNumber))
soup = BeautifulSoup(browser.page_source, "html.parser")
proxies = [(r.text.strip().split()[0], r.text.strip().split()[1]) for r in soup.find("tbody").find_all("tr")]
return proxies
if __name__=="__main__":
url = "http://www.xiladaili.com/gaoni/"
getFreeProxy(url)
(步骤三代码这么写,是观察到每一行的数据都保存在tbody节点的一个子节点tr中,本项目中我只关心代理IP地址和代理协议类型,只取了前两列的数据)
至此已经完成了我们的基本功能。
改进一:获取的很多代理实际上是不可用的,能不能筛选一下,只保留能用的代理呢?
改进二:虽然在改进一中,我们显示地指定了浏览器通过代理IP访问网页,我能不能确认一下,实际访问网页的IP就是代理IP而不是本机IP呢?
改进三:当我跑这段代码频繁访问西拉代理的时候,有时候好几秒网页都加载不出来,这是怎么回事?
项目收获
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)