【python爬虫】闲鱼爬虫,可以爬取商品

news2024/11/19 17:38:37

目录

前言

一、介绍

二、爬虫流程

1. 确定关键词并构造URL

2. 发送网络请求

3. 解析HTML并提取数据

4. 保存数据

三、使用代理IP

四、完整代码

五、总结


前言

闲鱼是一个很受欢迎的二手交易平台,但是由于没有开放API,我们需要使用爬虫来获取数据。本文将介绍如何使用Python爬虫爬取闲鱼上的商品信息,包括构造URL、发送网络请求、解析HTML并提取数据以及使用代理IP来进行爬取。如果您需要抓取闲鱼的其他数据,本文也提供了一些参考。

一、介绍

随着电子商务的兴起,二手交易平台也变得越来越受欢迎。作为淘宝旗下的二手交易平台,闲鱼的日活跃用户已经超过了1亿。因此,对于一些商家和买家来说,闲鱼是一个极具吸引力的平台。

对于我们开发者来说,有时候我们需要从闲鱼上抓取一些数据,比如价格走势,热门商品,关键词排名等等。但是,闲鱼并没有开放API,这就需要我们使用爬虫来获取数据。

本文将详细介绍如何使用Python爬虫爬取闲鱼上的商品信息。我们将主要使用requests库和BeautifulSoup库来完成这个任务。此外,为了避免被闲鱼封禁IP地址,我们还将使用代理IP来进行爬取。

二、爬虫流程

要完成我们的闲鱼爬虫,我们需要掌握以下几个步骤:

1. 确定关键词并构造URL

在爬取闲鱼数据之前,首先我们需要确定要搜索的关键词。这个关键词可以是任何你想要的内容,比如“二手手机”、“二手电脑”等等。

根据我们选择的关键词,我们需要构造一个URL,即闲鱼商品搜索的URL。URL的构造方法如下:

url = "https://2.taobao.com/search/index.htm?q={}&search_type=item&app=shopsearch".format(keyword)

其中,keyword为我们选择的关键词。

2. 发送网络请求

我们使用requests库来发送网络请求:

headers = {
   'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.96 Safari/537.36'}
response = requests.get(url, headers=headers)

在发送请求之前,我们需要设置请求头。这个请求头包含了我们浏览器的信息,这样可以避免被服务器轻易识别为爬虫。

3. 解析HTML并提取数据

我们使用BeautifulSoup库来解析HTML并提取数据:

soup = BeautifulSoup(response.text, 'html.parser')
goods_list = soup.find_all('div', {'class': 'J_MouserOnverReq'})

解析完HTML之后,我们需要找出包含商品信息的标签。我们可以通过查看闲鱼网页的源代码,找到所有商品信息都被包含在一个class为“J_MouserOnverReq”的div中。

4. 保存数据

最后一步,我们需要将爬取到的数据保存下来。这里我们使用csv库将数据保存到csv文件中。

with open('goods_info.csv', 'w', newline='') as f:
    writer = csv.writer(f)
    writer.writerow(['商品名称', '商品价格', '商品链接'])
    for goods in goods_list:
        title = goods.find('p', {'class': 'item-title'}).text.strip()
        price = goods.find('p', {'class': 'price'}).text.strip()
        link = goods.find('a', {'class': 'item-link'}).get('href')
        writer.writerow([title, price, link])

通过使用以上四个步骤,我们可以完成闲鱼商品信息的爬虫。

三、使用代理IP

由于频繁的发送网络请求会使服务器怀疑我们是爬虫,并且封禁我们的IP地址,所以我们需要使用代理IP来隐藏我们的真实IP地址。

我们可以从代理IP网站上获取代理IP。这里我们使用站大爷的API,可以通过以下的代码来获取代理IP:

def get_proxies():
    response = requests.get("http://ip.zdaye.com/dayProxy.html")
    soup = BeautifulSoup(response.text, 'html.parser')
    trs = soup.find_all('tr')
    proxies = []
    for tr in trs[1:]:
        tds = tr.find_all('td')
        ip = tds[0].text.strip()
        port = tds[1].text.strip()
        protocol = tds[3].text.strip().lower()
        proxies.append("{}://{}:{}".format(protocol, ip, port))
    return proxies

该函数会返回一个代理IP池。

我们可以在发送网络请求的时候使用代理IP,代码如下:

proxies = {
    "http": random.choice(get_proxies()),
    "https": random.choice(get_proxies())
}

response = requests.get(url, headers=headers, proxies=proxies)

在构造requests对象的时候,我们传入proxies参数,代表我们使用一个代理IP来发送网络请求。

四、完整代码

import csv
import random
import requests
from bs4 import BeautifulSoup


def get_proxies():
    """
    获取代理IP
    """
    response = requests.get("http://ip.zdaye.com/dayProxy.html")
    soup = BeautifulSoup(response.text, 'html.parser')
    trs = soup.find_all('tr')
    proxies = []
    for tr in trs[1:]:
        tds = tr.find_all('td')
        ip = tds[0].text.strip()
        port = tds[1].text.strip()
        protocol = tds[3].text.strip().lower()
        proxies.append("{}://{}:{}".format(protocol, ip, port))
    return proxies


def get_goods_info(keyword):
    """
    爬取商品信息
    """
    url = "https://2.taobao.com/search/index.htm?q={}&search_type=item&app=shopsearch".format(keyword)

    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) '
                      'Chrome/58.0.3029.96 Safari/537.36'}
    proxies = {
        "http": random.choice(get_proxies()),
        "https": random.choice(get_proxies())
    }

    response = requests.get(url, headers=headers, proxies=proxies)

    soup = BeautifulSoup(response.text, 'html.parser')
    goods_list = soup.find_all('div', {'class': 'J_MouserOnverReq'})

    with open('goods_info.csv', 'w', newline='') as f:
        writer = csv.writer(f)
        writer.writerow(['商品名称', '商品价格', '商品链接'])
        for goods in goods_list:
            title = goods.find('p', {'class': 'item-title'}).text.strip()
            price = goods.find('p', {'class': 'price'}).text.strip()
            link = goods.find('a', {'class': 'item-link'}).get('href')
            writer.writerow([title, price, link])


if __name__ == '__main__':
    get_goods_info('二手手机')

五、总结

本文介绍了如何使用Python爬虫爬取闲鱼上的商品信息,并且使用代理IP防止被封禁IP地址。如果您还需要爬取其他数据,比如评论、店铺信息等等,您可以根据本文提到的方法进行尝试。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1065959.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Ubuntu系统 OCR文字识别与 Latex公式识别

一、OCR文字识别 Step1:安装tesseract tesseract 是一个开源的OCR引擎,最初是由惠普公司开发用来作为其平板扫描仪的OCR引擎,2005年惠普将其开源出来,之后google接手负责维护。目前稳定的版本是3.0。4.0版本加入了基于LSTM的神经…

LED显示屏单元板质量好坏如何分辨?

要分辨LED显示屏单元板的质量好坏,可以考虑以下几个关键因素: 分辨率和图像质量 查看显示屏的分辨率和图像质量。高分辨率和清晰的图像通常是质量较高的显示屏的标志。 注意观察图像是否有像素化、色彩失真或亮度不均匀的问题。这里关于LED显示屏的尺寸…

React xlsx(工具库) 处理表头合并

前端导出excel表格 引入xlsx插件,不然应该是运行不起来的 npm i xlsx xlsx中文文档 插件2 exceljs npm i exceljs exceljs中文文档 导出 例子 import { ExportExcel } from ./exportExcel/index;const columns[{title: id,dataIndex: item1,},{title: 序号,dataInd…

一座“城池”:泡泡玛特主题乐园背后,IP梦想照亮现实

“更适合中国宝宝体质”的主题乐园,被泡泡玛特造出来了。 9月26日,位于北京朝阳公园内的国内首个潮玩行业沉浸式 IP 主题乐园,也是泡泡玛特首个线下乐园——泡泡玛特城市乐园 POP LAND正式开园。 约4万平方米的空间中,泡泡玛特使…

java vue框架搭建

最近在使用spring boot 和vue .js搭建框架 首先用idea 创建demo 项目 使用mybatis 持久层框架,数据库mysql ,maven构建项目 vue 使用命令nmp run build 构建后目录如下 把此项目dist下的static的文件夹拷贝到idea项目下的static,index.html…

开发工具:推荐几款非常漂亮的VScode主题

目录 Atom One Dark Theme Github Theme Night Owl Theme Night Owl JellyFish Theme Sublime Material Theme 深色 浅色 今天给大家推荐几款非常漂亮的VScode主题,值得收藏! Atom One Dark Theme 它是市场上最好的深色主题之一。Atom 标志性的…

2023年中国旋挖钻机市场销量、竞争格局及行业发展趋势分析[图]

旋挖钻机是一种用于桩工基建项目中成孔作业等基础建设的工程机械。相比于其他桩工机械,旋挖钻机施工效率高,控制精度高,污染和噪音较小并且整机灵活度高,可以适应我国大部分土壤地质条件,如中东部地区砂土,…

卡尔曼滤波器设计及实例

1 卡尔曼滤波器基本原理 卡尔曼滤波常用于动态多变化系统中的状态估计,是一种通用性强的自回归滤波器。它的由来和NASA登月有关。其发明者鲁道夫.E.卡尔曼在一次访问NASA的时候,发现阿波罗计划中一个难点是轨道预测问题,因而提出了一种滤波器…

揭开黑客的神秘面纱:黑客文化、技术手段与防御策略

目录 1. 引言1.1 黑客的定义与起源1.2 黑客文化的形成与传承 2. 黑客的分类与目标2.1 道德黑客与恶意黑客2.2 黑客攻击的目标与动机解析 3. 黑客的技术手段3.1 网络入侵与渗透测试3.2 社会工程学与钓鱼攻击3.3 恶意软件与病毒传播3.4 数据泄露与身份盗窃 4. 防御黑客攻击的策略…

微信公众号怎么变更认证主体?

公众号迁移有什么作用?只能变更主体吗?公众号迁移是将原公众号的粉丝、违规记录、文章和素材库(可选)迁移至一个新的公众号。整体流程较为复杂,需花费7-10天。通过公众号迁移功能可以将A账号的粉丝、文章素材&#xff…

Bridge Champ助力我国桥牌阔步亚运, Web3游戏为传统项目注入创新活力

本届杭州亚运会,中国桥牌队表现杰出,共斩获1金1银1铜佳绩,其中女子团体夺得冠军,混合团体获得亚军。这充分展现了我国桥牌的实力,也彰显了桥牌作为亚运会体育竞技项目的影响力。与此同时,Web3游戏Bridge Champ为传统桥牌项目带来创新模式,将有望推动桥牌运动在亚运舞台上焕发新…

Node.js操作MySQL8.0数据库无法连接

Node.js操作MySQL8.0数据库无法连接 原创:丶无殇  2023-10-07 报错内容 使用node.js连接数据库MySQL 8时候,报错ER_NOT_SUPPORTED_AUTH_MODE,并且提示Client does not support authentication protocol requested by server; consider upg…

blender UV展开

快捷键:选面可以一点,选线或点变形,g 移动,l 孤岛化 a全选 在Shading视图下,给mesh建立一个栅格图的纹理 变成这个样子 UV实时展开: 在UV editing模式下,打开左右实时同步 焊接shift选中左边两个…

张量-形状变换相关函数

tf.shape(input,name None)它有两个参数,input和name,input可以是一个张量,也可以是一个数组和list。该函数返回的是input的形状(shape),而且一个类型为int32的张量。 示例代码如下: import tensorflow.compat.v1 as tf tf.disable_v2_behavior()array [[[1,1,1],[2,2,2]],…

第三课-软件升级-Stable Diffusion教程

前言: 虽然第二课已经安装好了 SD,但你可能在其它地方课程中,会发现很多人用的和你的界面差距很大。这篇文章会讲一些容易忽略或者常常需要做的操作,不一定要完全照做,以后再回过头看看也可以。 1.控制类型 问题:为什么别人有“控制类型”部分,而我没有?如下红色方框…

微软AD身份增强方案,让IT运维省心更高效

Windows AD域为企业数字化办公提供了强有力的支撑,但由于互联网技术的飞速发展,AD域在现代企业办公场景中也面临了一些挑战。 某企业使用AD域控管理工具,在对接邮箱、电脑、网络时均会用到AD域账号。出于安全考虑,公司要求每三个月…

3D模型格式转换工具HOOPS Exchange助力Halocline开发VR

挑战: 支持客户群使用各种CAD系统和CAD文件格式。快速准确的加载可视化硬件数据。提供访问模型详细信息,同时确保高帧频性能。 结果: 确保支持标准文件格式和来自领先工程软件包的CAD数据。 通过查看简化模型或根据需要访问高层次的细节&am…

第五课 树与图

文章目录 第五课 树与图lc94.二叉树的中序遍历--简单题目描述代码展示 lc589.N叉树的层序遍历--中等题目描述代码展示 lc297.二叉树的序列化和反序列化--困难题目描述代码展示 lc105.从前序与中序遍历序列构造二叉树--中等题目描述代码展示 lc106.从中序与后序遍历序列构造二叉…

JavaScript入门——基础知识(3)

一、运算符 1.1 赋值运算符 目标:能够通过使用赋值运算符简化代码 赋值运算符:对变量进行赋值的运算符 将等号右边的值赋予给左边,要求左边必须是一个容器其他赋值运算符: -*/%使用这些运算符可以在对变量赋值时进行快速操作 例…

基于vue的MOBA类游戏攻略分享平台springboot23

大家好✌!我是CZ淡陌。一名专注以理论为基础实战为主的技术博主,将再这里为大家分享优质的实战项目,本人在Java毕业设计领域有多年的经验,陆续会更新更多优质的Java实战项目,希望你能有所收获,少走一些弯路…