写一个脚本,可以对某网站进行遍历,提取所有涉及姓名职业的信息,并存入txt, 添加异常处理、加入多线程,每读取一个网页,等待随机0~5秒后再执行下一个操作
时间: 2024-03-28 17:38:22 浏览: 50
网页抓取/正则匹配/xml读写/多线程
5星 · 资源好评率100%
以下是一个Python脚本示例,可以对某网站进行遍历,提取所有涉及姓名和职业的信息,并保存到txt文件中。同时添加了异常处理和多线程功能,并且在读取每个网页后等待随机0~5秒再执行下一个操作,以避免频繁访问网站而被封IP。
```python
import requests
from bs4 import BeautifulSoup
import threading
import random
import time
url = "https://example.com" # 目标网站的URL
keywords = ["name", "occupation"] # 涉及姓名和职业的关键词列表
result = "" # 存储结果的字符串
# 遍历网站
def traverse_website(url):
global result
try:
res = requests.get(url)
except requests.exceptions.RequestException as e:
print(f"Failed to access {url}: {e}")
return
soup = BeautifulSoup(res.text, "html.parser")
# 查找包含关键词的标签
for tag in soup.find_all(lambda tag: tag.name == "div" and any(word in tag.text for word in keywords)):
result += tag.text.strip() + "\n" # 把结果添加到字符串中
# 遍历所有链接
for link in soup.find_all("a"):
new_url = link.get("href")
if new_url.startswith("http"):
# 多线程遍历链接
threading.Thread(target=traverse_website, args=(new_url,)).start()
# 随机等待0~5秒
time.sleep(random.randint(0, 5))
# 调用遍历函数,并保存结果到文件
traverse_website(url)
with open("result.txt", "w", encoding="utf-8") as f:
f.write(result)
```
在读取每个网页后等待随机0~5秒,可以模拟人类的访问行为,避免频繁访问网站而被封IP。同时,添加了异常处理和多线程功能,提高了程序的健壮性和效率。
阅读全文