【爬虫实战】利用代理爬取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库来保存爬取的数据。代码中的重试机制能够处理网络请求失败的情况,并在请求失败时进行重试。最后,代码会在控制台输出爬取的状态信息,并在完成

none
最后修改于:2024年08月13日 09:45

评论已关闭

推荐阅读

Vue中使用mind-map实现在线思维导图
2024年08月04日
VUE
Web前端最全Vue实现免密登录跳转的方式_vue怎么样不登录返回首页,最强技术实现
2024年08月04日
VUE
vue3 项目搭建教程(基于create-vue,vite,Vite + Vue)
2024年08月04日
VUE
Vue-颜色选择器实现方案——>Vue-Color( 实战*1+ Demo*7)
2024年08月04日
VUE
Vue项目卡顿慢加载?这些优化技巧告诉你!_vue数据多渲染卡顿
2024年08月04日
VUE
vue中的keep-alive详解与应用场景
2024年08月04日
VUE
Vue、React实现excel导出功能(三种实现方式保姆级讲解)
2024年08月04日
vue-office/docx插件实现docx文件预览
2024年08月04日
VUE
java调用js文件的两种方法(支持V8引擎)
2024年08月04日
JavaScript:解决计算精度问题/mathjs/bignumber.js/big.js/decimal.js
2024年08月04日
两周从爬虫小白变大神 _yjs_js_security_passport
2024年08月04日
JS笔记(对象、函数、数组)
2024年08月04日
Markdown.js:强大的纯JavaScript Markdown解析器
2024年08月04日
Vue项目:js模拟点击a标签下载文件并重命名,URL文件地址下载方法、请求接口下载文件方法总结。
2024年08月04日
vue 父组件怎么获取子组件里面的data数据
2024年08月04日
VUE
个人开发实现AI套壳网站快速搭建(Vue+elementUI+SpringBoot)
2024年08月04日
el-table 表格封装并改造实现单元格可编辑
2024年08月04日
none
nodejs环境下创建vue项目、SSH密钥登陆!!!
2024年08月04日
vue+quill+element-ui实现视频、图片上传及缩放保姆级教程,轻松使用富文本
2024年08月04日
【three.js】22. Imported Models导入模型
2024年08月04日