设计两个网页A.html与B.html,他们都包含相同结构的学生信息(学号,姓名,性别,年龄)但是两个文件表格中的学生不一样,设计一个包含两个线程的爬虫程序,一个线程爬去A.html,另外一个爬B.html,爬取的学生信息都保存到同一个列表students中,最后显示爬取的结果
时间: 2024-12-14 20:21:50 浏览: 13
要设计这样的爬虫程序,可以使用Python的`requests`库来获取HTML内容,然后使用BeautifulSoup或其他解析库如`lxml`来提取所需的数据。这里是一个基本的示例,我们将使用`threading`模块创建两个线程分别爬取A.html和B.html的内容,并将结果合并到一个列表中。
```python
import requests
from bs4 import BeautifulSoup
import threading
# 学生信息数据结构
class Student:
def __init__(self, student_id, name, gender, age):
self.student_id = student_id
self.name = name
self.gender = gender
self.age = age
def fetch_html(url, students_list):
try:
response = requests.get(url)
soup = BeautifulSoup(response.text, 'html.parser')
# 提取表格中的学生信息
table_data = soup.find('table') # 假设表都在页面的某个位置
rows = table_data.find_all('tr')
for row in rows[1:]: # 假设第一行是表头
cols = row.find_all('td')
data = [col.text.strip() for col in cols]
if len(data) == 4: # 检查是否含有四个元素
student = Student(*data)
students_list.append(student)
except Exception as e:
print(f"Error fetching {url}: {e}")
# A.html 和 B.html 的URLs
urls = ['http://example.com/A.html', 'http://example.com/B.html']
students_list = []
# 爬虫函数并启动线程
def spider(url):
t = threading.Thread(target=fetch_html, args=(url, students_list))
t.start()
spider(urls[0])
spider(urls[1])
# 线程结束后等待它们结束
for t in threading.enumerate():
if t is not threading.main_thread:
t.join()
# 打印结果
print("Students:")
for student in students_list:
print(f"{student.student_id}, {student.name}, {student.gender}, {student.age}")
阅读全文