Python爬虫简单运用爬取 * 的实现
作者:QQ128619 发布时间:2021-08-25 23:26:42
功能1: 爬取西拉ip代理官网上的代理ip
环境:python3.8+pycharm
库:requests,lxml
浏览器:谷歌
IP地址:http://www.xiladaili.com/gaoni/
分析网页源码:
选中div元素后右键找到Copy再深入子菜单找到Copy Xpath点击一下就复制到XPath
我们复制下来的Xpth内容为:/html/body/div/div[3]/div[2]/table/tbody/tr[50]/td[1]
虽然可以查出来ip,但不利于程序自动爬取所有IP,利用谷歌XpathHelp测试一下
从上图可以看出,只匹配到了一个Ip,我们稍作修改,即可达到目的
,有关xpath规则,可以参考下表;
经过上面的规则学习后,我们修改为://*[@class=‘mt-0 mb-2 table-responsive']/table/tbody/tr/td[1],再利用xpthhelp工具验证一下:
这样我们就可以爬取整个页面的Ip地址了,为了方便爬取更多的IP,我们继续往下翻页,找到翻页按钮:
找规律,发现每翻一页,a标签下的href连接地址加1即可,python程序可以利用for循环解决翻页问题即可。
为了提高IP代理的质量,我们爬取评分高的IP来使用。找到评分栏下的Xpath路径,这里不再做详细介绍,思路参考上面找IP地址的思路,及XPath规则,过程参考下图:
Python代码实现
代码可复制粘贴直接使用,如果出现报错,修改一下cookie。这里使用代理ip爬取,防止IP被封。当然这里的代码还是基础的,有空可以写成代理池,多任务去爬。当然还可以使用其它思路去实现,这里只做入门介绍。当有了这些 * 后,我们可以用文件保存,或者保存到数据库中,根据实际使用情况而定,这里不做保存,只放到列表变量中保存。
import requests
from lxml import etree
import time
class XiLaIp_Spider:
def __init__(self):
self.url = 'http://www.xiladaili.com/gaoni/'
self.headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.61 Safari/537.36',
'cookie': 'td_cookie=1539882751; csrftoken=lymOXQp49maLMeKXS1byEMMmsavQPtOCOUwy6WIbfMNazZW80xKKA8RW2Zuo6ssy; Hm_lvt_31dfac66a938040b9bf68ee2294f9fa9=1592547159; Hm_lvt_9bfa8deaeafc6083c5e4683d7892f23d=1592535959,1592539254,1592612217; Hm_lpvt_9bfa8deaeafc6083c5e4683d7892f23d=1592612332',
}
self.proxy = '116.196.85.150:3128'
self.proxies = {
"http": "http://%(proxy)s/" % {'proxy': self.proxy},
"https": "http://%(proxy)s/" % {'proxy': self.proxy}
}
self.list1 = []
def get_url(self):
file = open('Ip_Proxy.txt', 'a', encoding='utf-8')
ok_file = open('OkIp_Proxy.txt', 'a', encoding='utf-8')
for index in range(50):
time.sleep(3)
try:
res = requests.get(url=self.url if index == 0 else self.url + str(index) + "/", headers=self.headers,
proxies=self.proxies, timeout=10).text
except:
continue
data = etree.HTML(res).xpath("//*[@class='mt-0 mb-2 table-responsive']/table/tbody/tr/td[1]")
# '//*[@id="scroll"]/table/tbody/tr/td[1]'
score_data = etree.HTML(res).xpath("//*[@class='mt-0 mb-2 table-responsive']/table/tbody/tr/td[8]")
for i, j in zip(data, score_data):
# file.write(i.text + '\n')
score = int(j.text)
# 追加评分率大于十万的ip
if score > 100000:
self.list1.append(i.text)
set(self.list1)
file.close()
ok_ip = []
for i in self.list1:
try:
# 验证代理ip是否有效
res = requests.get(url='https://www.baidu.com', headers=self.headers, proxies={'http': 'http://' + i},
timeout=10)
if res.status_code == 200:
# ok_file.write(i + '\n')
ok_ip.append(i)
except:
continue
ok_file.close()
return ok_ip
def run(self):
return self.get_url()
dl = XiLaIp_Spider()
dl.run()
来源:https://blog.csdn.net/QQ128619/article/details/106915628
猜你喜欢
- [sql] -- ===================【创建存储过程】===================== USE [Message
- Summary主要包括以下三种途径:使用独立的函数;使用torch.type()函数;使用type_as(tesnor)将张量转换为给定类型
- 前言通常执行 python 程序要有相应的 Python 环境,但某些特定场景下,我们可能并不愿意这么麻烦的去配置这些环境(比如将写好的脚本
- Array.prototype中定义了很多操作数组的方法,下面介绍ECMAScript3中的一些方法1.Array.join()方法该方法将
- 直方图是用于展示数据的分组分布状态的一种图形,用矩形的宽度和高度表示频数分布,通过直方图,用户可以很直观的看出数据分布的形状、中心位置以及数
- 1、创建存储过程 create or replace procedure test(var_name_1 in type,var_name_
- Python字典是另一种可变容器模型,且可存储任意类型对象,如字符串、数字、元组等其他容器模型。一、创建字典字典由键和对应值成对组成。字典也
- 一、检测网络信息和系统信息 在Frontpage 2000 的Explorer管理器中选择帮助(Help)|关于Frontpage管理器(A
- 看了很多介绍javascript面向对象技术的文章,很晕.为什么?不是因为写得不好,而是因为太深奥.javascript中的对象还没解释清楚
- 这篇日志完全是看了一篇日志后的启发,原文为: * 的eval和new Function。很少使用new Array的方式来定义数组,没想到ne
- Oracle客户端精简后的文件,可以实现数据库的通信,直接和软件打包: 第一步:拷贝文件:主要是四个目录:bin,nls,oracore,N
- 1.sp_helpsort SELECT SERVERPROPERTY ('Collation') 查看你的排序规则. 不过
- python线程池ThreadPoolExecutor,传单个参数和多个参数这是线程池传单个参数的from concurrent.futur
- 在最近一个项目中,表单验证需要对时间的起止范围进行判断:结束时间需大于或等于开始时间。即:结束年须大于起始年;如果相等,则比较起始月与结束月
- 用下列代码判断表单提交到服务器的数据是否有谈话内容,如果没有的话就不作处理了:if len(usersays)<>0&
- 前几天安装Python的时候没有装上pip工具,所以只能现在手动安装了。首先,访问https://bootstrap.pypa.io/get
- 在IE7还不支持counter 和increment 属性之前,我从来没有用过它们,也从来没有使用过:before 伪元素和content
- 给定一篇英语文章,要求统计出所有单词的个数,并按一定次序输出。思路是利用go语言的map类型,以每个单词作为关键字存储数量信息,代码实现如下
- 下面是BeforeInitialBind事件过程:<SCRIPT language=vbscript event=
- 具体特征如下: 1、通过模板实现俄文正常。 2、通过后台数据库生成的静态俄文信息,后台显示正常, 前台乱码。 3、英文正常。 和该主题相关的