【爬虫实战】利用代理爬取Temu电商数据
import requests
from lxml import etree
import csv
import time
# 设置请求头
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.163 Safari/537.36',
}
# 设置CSV文件头
csv_headers = ['商品名称', '商品价格', '商品评分', '销售商信息', '商品链接']
# 设置代理服务器
proxy = {'http': 'http://120.77.138.138:80', 'https': 'https://120.77.138.138:80'}
# 设置请求超时时间
timeout = 10
# 设置请求失败的重试次数
max_retries = 5
# 初始化请求计数器
retries_count = 0
# 初始化CSV文件
with open('temu_data.csv', 'w', newline='', encoding='utf-8') as csvfile:
writer = csv.DictWriter(csvfile, fieldnames=csv_headers)
writer.writeheader()
# 设置爬取页数
for page in range(1, 11):
print(f'正在爬取第{page}页数据...')
url = f'https://www.temu.com/search/?q=%E6%B5%8B%E8%AF%95&sort=rank&page={page}'
# 实施重试机制
while retries_count < max_retries:
try:
response = requests.get(url, headers=headers, proxies=proxy, timeout=timeout)
response.raise_for_status() # 检查是否请求成功
retries_count = 0 # 重置请求计数器
break
except requests.exceptions.RequestException as e:
print(f'请求失败,原因:{e}')
retries_count += 1
time.sleep(5) # 等待5秒后重试
# 解析HTML内容
tree = etree.HTML(response.text)
product_items = tree.xpath('//div[@class="product-item"]')
for product_item in product_items:
name = product_item.xpath('.//h3/a/text()')[0].strip()
price = product_item.xpath('.//div[@class="product-price"]/span/text()')[0].strip()
score = product_item.xpath('.//div[@class="product-score"]/text()')[0].strip()
seller = product_item.xpath('.//div[@class="product-seller"]/text()')[0].strip()
link = product_item.xpath('.//h3/a/@href')[0].strip()
# 将数据写入CSV文件
writer.writerow({
'商品名称': name,
'商品价格': price,
'商品评分': score,
'销售商信息': seller,
'商品链接': link
})
print(f'第{page}页数据爬取完成。\n')
time.sleep(2) # 为了避免对服务器造成过大压力,设置2秒钟的间隔
print('所有页面数据爬取完成。')
这段代码使用了requests库来发送HTTP请求,并使用lxml库来解析HTML内容。同时,使用了CSV库来保存爬取的数据。代码中的重试机制能够处理网络请求失败的情况,并在请求失败时进行重试。最后,代码会在控制台输出爬取的状态信息,并在完成
评论已关闭