网页提取,正则,标签,数值文本 方法比较

import requests
import re
import parser
from lxml import etree
url = 'https://www.****.com/'

headers = {'User-Agent':'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36'}
#设置访问请求
response = requests.get(url,headers=headers,timeout=5)
#返回状态码

return_code = response.status_code 
td = re.compile(r'(?<=<td>)(.*?)(?=</td>)') #创造一个规则模式要<td>和</td>之间的字符
tb = re.findall(td,response.text) #使用上面创造的字符处理html

'''
纯数值处理,基于纯文本逻辑分析,可以算法修正,灵活性高。
'''
ip_type =[(C_type,ip) for C_type,ip in zip([i for i in tb if len(i) > 10],[j.split('/')[0] for j in tb if "H" in j or  's' in j])]

'''
正则提取,优点逻辑简单,代码短,速度快
'''
#'.'代表任意字符 ,
#'*'代表一个或者多个字符, 
#'?'代表一个非贪婪匹配 , 如果只有.*则只能返回一个结果
# '\d'代表规则内的一个内容 ,
#'\d+'代表不限字符长度,
#'\d{number1,number2}'代表限制字符长度在number1在number2之间
# re.S的作用是将换行符等特殊字符变成普通字符,才能被正则表达式匹配,
#两段规则之间才能用'.*?'
ip_prot1 = re.findall('<td>(\d{1,3}.\d{1,3}.\d{1,3}.{1,3})</td>.*?<td>(\d+)</td>',response.text,re.S)

#xpth 提取 ,标签提取
'''
优点,直观,辅助提取效果好,缺点,难以应对复杂多变的页面
No1: F12进入开发者模式
No2:Elements 复制标签 :1.右键选择标签-->2.复制选择copy Xpath
No3:需要注意比较网页源码是否有与xpath不同的地方
'''
selector = etree.HTML(response.text)
#//*[@id="ip_list"]/tbody/tr[3]/td[2] >不要的地方就删除具体值,类似八爪鱼
#网页源码没有'tbody' 所以要删除
#先要一级标签,删除具体数值tr[3]的[3],表示tr标签全要
trs = selector.xpath('//*[@id="ip_list"]/tr') 
# xpath里'*'表示通配符
for tr in trs[1:]:#循环一级标签共二级标签提取数据
    #//*[@id="ip_list"]/tbody/tr[3]/td[2]
    ip = tr.xpath('./td[2]/text()')
    port = tr.xpath('./td[3]/text()')

ip_prot2 = [(tr.xpath('./td[2]/text()')[0],tr.xpath('./td[3]/text()')[0]) for tr in trs[1:] if len(tr.xpath('./td[3]/text()')) >0 ]
print(ip_prot2)
'''
pandas直接提取html表格文件,可以研究一下
'''
 df = pd.read_html('/home/ubuntu/下载/NewFilepath_vlaue.html') 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值