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

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'(?<=)(.*?)(?=)') #创造一个规则模式要和之间的字符
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('(\d{1,3}.\d{1,3}.\d{1,3}.{1,3}).*?(\d+)',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') 

你可能感兴趣的:(python学习)