要点思路:
分析网页结构
如果
urls = [f'http://www.0818tuan.com/list-1-{i}.html' for i in range(0,11)]
改成
urls = [f'http://www.0818tuan.com/list-1-{i}.html' for i in range(0,90)]
爬取的活动会更多一点,时效性会差一点
知识点:
列表是一个有序的集合,可以包含任意类型的元素,并且可以通过索引访问。
字典是一个无序的集合,它存储键值对(key-value pairs),其中键是唯一的,可以用来查找与之相关联的值。
取随机数
正则(难点)
写入文件[Python] 纯文本查看 复制代码#python==3.8.6#requests==2.31.0
#[] 创建了一个空列表(list)。列表是一个有序的集合,可以包含任意类型的元素,并且可以通过索引访问。
#{} 创建了一个空字典(dictionary)。字典是一个无序的集合,它存储键值对(key-value pairs),其中键是唯一的,可以用来查找与之相关联的值。
#取随机数
#写入文件
import requests
import re
import csv
# 生成链接列表
urls = [f'http://www.0818tuan.com/list-1-{i}.html' for i in range(0,11)]
# 设置请求头
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36'
}
matches = []
for url in urls:
# 发送HTTP GET请求
response = requests.get(url, headers=headers)
# 确保请求成功
if response.status_code == 200:
# 注意:这里的正则表达式需要根据实际的HTML结构进行调整
matches_temp = re.findall(r'[d\/](\d{7,}).html" target="_blank" title="([\u4e00-\u9fa5].*)" ', response.text)
matches.extend(matches_temp) # 将找到的匹配项添加到matches列表中
# 初始化空字典来存储URL和标题的配对
match_dict = {}
# 遍历matches列表构建字典
for match in matches:
match_id = match[0]
match_title = match[1]
url = f"http://www.0818tuan.com/xbhd/{match_id}.html"
match_dict[url] = match_title
with open("爬取结果.csv", 'w', newline='', encoding="GBK",errors='ignore') as f:
writer = csv.writer(f)
writer.writerow(['url链接', '标题']) # 写入表头
# 遍历字典并写入匹配结果
for url, title in match_dict.items():
writer.writerow([url, title])