当前位置: 首页 > news >正文

Python爬虫html网址实战笔记

仅供学习参考

一、获取文本和链接

import requests
from lxml import htmlbase_url = "https://abcdef自己的网址要改"
response = requests.get(base_url)
response.encoding = 'utf-8'  # 指定正确的编码方式tree = html.fromstring(response.content, parser=html.HTMLParser(encoding='utf-8'))# 固定部分XPath,只有最后一个div的索引会变化,自己修改,复制网址的xpath路径
fixed_xpath = "/html/body/div[4]/div[2]/ul/li[{div_index}]/a"filename = "现TXT文本内容.txt"with open(filename, "w", encoding="utf-8") as f:for div_index in range(1, 100):  # 假设有100个人# 构建完整的XPathxpath = fixed_xpath.format(div_index=div_index)# 使用XPath定位每个人员信息的元素person_elements = tree.xpath(xpath)for person_element in person_elements:# 获取网址路径和姓名信息url_path = person_element.get("href")full_url = base_url + url_path if url_path else ""name = person_element.xpath('string()').strip()  # 提取文本内容并去除空格# 仅输出网址中的路径部分url_path = full_url.replace(base_url, "")output_str = f"网址路径:{url_path}\n姓名:{name}\n\n"print(output_str)f.write(output_str)print(f"输出已保存到文件 {filename}")
结果:现TXT文本内容网址路径:http://abc.html
姓名:abc

二、根据现有的TXT文本,打开链接找到需要的内容。将内容放入姓名之后,以新的文本输出

import re
import requests
from lxml import html# 读取文件内容
with open("现TXT文本内容.txt", "rb") as file:content = file.read().decode('utf-8', 'ignore')lines = content.splitlines()email_xpath = '/html/body/div[4]/div/div/div/div/div[2]/div[1]/div[2]/div[4]/div[1]/text()'filename = "现TXT文本内容邮箱.txt"with open(filename, "w", encoding="utf-8") as f:# 遍历每一行内容for i in range(0, len(lines), 1):url_line = lines[i]  # 当前行为URLname_line = lines[i + 1]  # 下一行为姓名# 从URL和姓名行中提取URL和姓名信息url_match = re.search(r"https?://[^\s]+", url_line)name_match = re.search(r"姓名:(.+)", name_line)# 如果URL和姓名都匹配到了if url_match and name_match:url = url_match.group()name = name_match.group(1)# 发送GET请求到URL获取页面内容response = requests.get(url)# 将页面内容转为XPath对象tree = html.fromstring(response.content)# 使用XPath表达式提取邮箱信息email = tree.xpath(email_xpath)email = email[0] if email else "未找到邮箱地址"# 将姓名和邮箱信息写入文件output_str = f"{name}:{email}\n"print(output_str)f.write(output_str)# 输出保存结果
print(f"输出已保存到文件 {filename}")
输出TXT文本内容
abc:abc@aa.com
...

相关文章:

  • 单测的思路
  • 【Git】Java 使用 JGit 创建 Git 代码仓库
  • 【电路笔记】-LR串联电路
  • 天锐绿盾 | 办公终端文件数据\资料防泄密软件
  • 使用消息中间件实现系统间的异步通信和解耦
  • HttpClient:HTTP GET请求的服务器响应输出
  • 「算法」滑动窗口
  • 入门者拿捏 Java 的必备小秘诀
  • Linux:docker在线仓库(docker hub 阿里云)基础操作
  • VMwareWorkstation17.0虚拟机安装搭建Windows 11虚拟机(完整图文详细步骤教程)
  • Python学习路线图
  • ⭐北邮复试刷题103. 二叉树的锯齿形层序遍历 (力扣每日一题)
  • 模拟发送 Ctrl+Alt+Del 快捷键
  • 【简洁的代码永远不会掩盖设计者的意图】如何写出规范整洁的代码
  • 什么是tomcat?tomcat是干什么用的?
  • 分享的文章《人生如棋》
  • [笔记] php常见简单功能及函数
  • [译]Python中的类属性与实例属性的区别
  • Android 控件背景颜色处理
  • CSS实用技巧
  • express如何解决request entity too large问题
  • GDB 调试 Mysql 实战(三)优先队列排序算法中的行记录长度统计是怎么来的(上)...
  • JavaScript类型识别
  • JavaScript设计模式之工厂模式
  • Java知识点总结(JDBC-连接步骤及CRUD)
  • Linux CTF 逆向入门
  • Linux后台研发超实用命令总结
  • spring boot 整合mybatis 无法输出sql的问题
  • SQLServer之创建显式事务
  • 十年未变!安全,谁之责?(下)
  • 思考 CSS 架构
  • 用mpvue开发微信小程序
  • MiKTeX could not find the script engine ‘perl.exe‘ which is required to execute ‘latexmk‘.
  • 整理一些计算机基础知识!
  • ​【原创】基于SSM的酒店预约管理系统(酒店管理系统毕业设计)
  • ​香农与信息论三大定律
  • $.extend({},旧的,新的);合并对象,后面的覆盖前面的
  • (07)Hive——窗口函数详解
  • (13)Hive调优——动态分区导致的小文件问题
  • (31)对象的克隆
  • (4)Elastix图像配准:3D图像
  • (Redis使用系列) SpringBoot 中对应2.0.x版本的Redis配置 一
  • (附源码)计算机毕业设计SSM教师教学质量评价系统
  • (六)库存超卖案例实战——使用mysql分布式锁解决“超卖”问题
  • .describe() python_Python-Win32com-Excel
  • .mysql secret在哪_MySQL如何使用索引
  • .Net Core缓存组件(MemoryCache)源码解析
  • .net 反编译_.net反编译的相关问题
  • .NetCore 如何动态路由
  • .NetCore实践篇:分布式监控Zipkin持久化之殇
  • []Telit UC864E 拨号上网
  • [Android]Tool-Systrace
  • [AutoSar]状态管理(五)Dcm与BswM、EcuM的复位实现
  • [BZOJ 1040] 骑士
  • [C++]四种方式求解最大子序列求和问题