爬虫简单实例-爬取拼多多商品信息

接口

  • https://youhui.pinduoduo.com/goods/goods-detail?goodsId=商品信息ID

思路

通过遍历商品信息ID来获取商品的信息, 1 ~ 99999999999
然后使用多线程或多进程进行抓取

  • 优点 : 无反爬,实现简单
  • 缺点 : 效率慢,资源损耗大,时间长

效果

在这里插入图片描述
在这里插入图片描述

实现

#!/usr/bin/env python
# -*- coding=utf-8 -*-
__author__ = 'Man Li' 

import os
import re
import sys
import time
import json
import random
import requests
from requests.exceptions import ReadTimeout, ConnectionError, RequestException
import csv

from lxml import etree


from multiprocessing import Process



defaultencoding = 'utf-8'
if sys.getdefaultencoding() != defaultencoding:
    reload(sys)
    sys.setdefaultencoding(defaultencoding)


#USER_AGENTS 随机头信息
USER_AGENTS = [
    "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; AcooBrowser; .NET CLR 1.1.4322; .NET CLR 2.0.50727)",
    "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; Acoo Browser; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.0.04506)",
    "Mozilla/4.0 (compatible; MSIE 7.0; AOL 9.5; AOLBuild 4337.35; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)",
    "Mozilla/5.0 (Windows; U; MSIE 9.0; Windows NT 9.0; en-US)",
    "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET CLR 2.0.50727; Media Center PC 6.0)",
    "Mozilla/5.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET CLR 1.0.3705; .NET CLR 1.1.4322)",
    "Mozilla/4.0 (compatible; MSIE 7.0b; Windows NT 5.2; .NET CLR 1.1.4322; .NET CLR 2.0.50727; InfoPath.2; .NET CLR 3.0.04506.30)",
    "Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN) AppleWebKit/523.15 (KHTML, like Gecko, Safari/419.3) Arora/0.3 (Change: 287 c9dfb30)",
    "Mozilla/5.0 (X11; U; Linux; en-US) AppleWebKit/527+ (KHTML, like Gecko, Safari/419.3) Arora/0.6",
    "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.2pre) Gecko/20070215 K-Ninja/2.1.1",
    "Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9) Gecko/20080705 Firefox/3.0 Kapiko/3.0",
    "Mozilla/5.0 (X11; Linux i686; U;) Gecko/20070322 Kazehakase/0.4.5",
    "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.8) Gecko Fedora/1.9.0.8-1.fc10 Kazehakase/0.5.6",
    "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.56 Safari/535.11",
    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_3) AppleWebKit/535.20 (KHTML, like Gecko) Chrome/19.0.1036.7 Safari/535.20",
    "Opera/9.80 (Macintosh; Intel Mac OS X 10.6.8; U; fr) Presto/2.9.168 Version/11.52",
    "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.11 TaoBrowser/2.0 Safari/536.11",
    "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.71 Safari/537.1 LBBROWSER",
    "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; LBBROWSER)",
    "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; QQDownload 732; .NET4.0C; .NET4.0E; LBBROWSER)",
    "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.84 Safari/535.11 LBBROWSER",
    "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E)",
    "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; QQBrowser/7.0.3698.400)",
    "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; QQDownload 732; .NET4.0C; .NET4.0E)",
    "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; SV1; QQDownload 732; .NET4.0C; .NET4.0E; 360SE)",
    "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; QQDownload 732; .NET4.0C; .NET4.0E)",
    "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E)",
    "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.89 Safari/537.1",
    "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.89 Safari/537.1",
    "Mozilla/5.0 (iPad; U; CPU OS 4_2_1 like Mac OS X; zh-cn) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8C148 Safari/6533.18.5",
    "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:2.0b13pre) Gecko/20110307 Firefox/4.0b13pre",
    "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:16.0) Gecko/20100101 Firefox/16.0",
    "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11",
    "Mozilla/5.0 (X11; U; Linux x86_64; zh-CN; rv:1.9.2.10) Gecko/20100922 Ubuntu/10.10 (maverick) Firefox/3.6.10"
]

#构造请求头
HEADER = {
    'User-Agent': random.choice(USER_AGENTS),
    'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
    'Accept-Language': 'en-US,en;q=0.5',
    'Connection': 'keep-alive',
    'Accept-Encoding': 'gzip, deflate',
}

#Get网页,返回内容
def get_html( url_path, payload = '', cookies = '',proxies = ''):
	try:
		s = requests.Session()
		r = s.get(
				url_path,#路径
				headers=HEADER,#请求头
				params=payload,#传参 @payload 字典或者json
				cookies=cookies,#cookies
				verify=True,#SSL验证 @verify False忽略;True开启
				proxies=proxies,#代理
				timeout=30)#@timeout 超时单位 秒
		r.raise_for_status()
		#print r.headers#获取响应头
		#print r.cookies#获取cookies
		return r.text
	except ReadTimeout:
 		print('Timeout')
	except ConnectionError:
		print('Connection error')
	except RequestException:
		print('RequestException')

def get_codimg(html):
    datas = etree.HTML(html)
    #print(datas)
    #//*[@id="__next"]/div/div[2]
    info = datas.xpath('//*[@id="__next"]/div/div[2]//text()')
    #print(info)
    return info

def get_image(html):
    html = str(html)
    reg = r"src=\"(.*?)\""
    reger = re.compile(reg, re.S)
    data = re.findall(reger, html)
    return data

csv_data_file = 'D:/PDD_5_7.csv'

# 爬取商品信息ID在 50000000 ~ 100000000 的商品
n=50000000
while n<100000000:
    get_proxies = {
      "http": random.choice(http_ip),
      "https": random.choice(https_ip),
    }
    test1url = "https://youhui.pinduoduo.com/goods/goods-detail?goodsId="+str(n)
    print("链接: "+test1url)
    print("ID : "+str(n))
    #print(get_proxies)
    html_info = get_html(test1url)
    if "An unexpected error has occurred" in str(html_info) or "NaN" in str(html_info):
        #print("未找到商品信息")
        #print("***************************")
        pass
    else:

        cod_link = test1url
        print("商品链接: "+cod_link)
        #print(get_image(html_info))
        imgs = get_image(html_info)
        
        if imgs == []:
            continue

        cod_imglink = imgs[1]
        print("商品图片: "+cod_imglink)
        '''
        for src_img in imgs:
            print(src_img)
        '''
        cod_info = get_codimg(html_info)
        cod_name = cod_info[0]
        print("商品名称: "+cod_name)
        cod_pjiege = cod_info[4]
        print("商品价格: "+cod_pjiege)
        cod_xiaoliang = cod_info[6]
        print("商品销量: "+cod_xiaoliang)
        cod_shop = cod_info[9]
        print("店铺名称: "+cod_shop)
        #cod_shop = cod_info[10]
        print(cod_info[10]+":"+cod_info[11])
        print(cod_info[12]+":"+cod_info[13])
        print(cod_info[14]+":"+cod_info[15])
        '''
        for cod_data in cod_info:
            print(cod_data)
        '''
        time_data = str(time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time())))
        input_datas = ["拼多多",cod_name.replace("\'",""),cod_link,cod_imglink,cod_pjiege,cod_xiaoliang,cod_shop.replace("\'",""),cod_info[10],
                        cod_info[11],cod_info[12],cod_info[13],cod_info[14],cod_info[15],time_data]
        #print('D:/py_test/yibiao_Auto/report/xyzg_data/tb_test1.csv')

        #input_datas = [cod_name1,cod_name2]
        with open(csv_data_file, 'a', newline='', encoding='utf-8') as f:
            try:
                csv_write = csv.writer(f,dialect='excel')
                csv_write.writerow(input_datas)
            except:
                print("获取内容编码不标准存在问题")
    print("\n")
    n+=1
		
爬虫(Web Crawler)是一种自动化程序,用于从互联网上收集信息。其主要功能是访问网页、提取数据并存储,以便后续分析或展示。爬虫通常由搜索引擎、数据挖掘工具、监测系统等应用于网络数据抓取的场景。 爬虫的工作流程包括以下几个关键步骤: URL收集: 爬虫从一个或多个初始URL开始,递归或迭代地发现新的URL,构建一个URL队列。这些URL可以通过链接分析、站点地图、搜索引擎等方式获取。 请求网页: 爬虫使用HTTP或其他协议向目标URL发起请求,获取网页的HTML内容。这通常通过HTTP请求库实现,如Python中的Requests库。 解析内容: 爬虫对获取的HTML进行解析,提取有用的信息。常用的解析工具有正则表达式、XPath、Beautiful Soup等。这些工具帮助爬虫定位和提取目标数据,如文本、图片、链接等。 数据存储: 爬虫将提取的数据存储到数据库、文件或其他存储介质中,以备后续分析或展示。常用的存储形式包括关系型数据库、NoSQL数据库、JSON文件等。 遵守规则: 为避免对网站造成过大负担或触发反爬虫机制,爬虫需要遵守网站的robots.txt协议,限制访问频率和深度,并模拟人类访问行为,如设置User-Agent。 反爬虫应对: 由于爬虫的存在,一些网站采取了反爬虫措施,如验证码、IP封锁等。爬虫工程师需要设计相应的策略来应对这些挑战。 爬虫在各个领域都有广泛的应用,包括搜索引擎索引、数据挖掘、价格监测、新闻聚合等。然而,使用爬虫需要遵守法律和伦理规范,尊重网站的使用政策,并确保对被访问网站的服务器负责。
### 回答1: # -*- coding:utf-8 -*- import requests import json url = 'http://api.pinduoduo.com/goods/list' payload = { 'keyword': '拼多多商品', 'page': 1, 'page_size': 20 } headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.106 Safari/537.36' } res = requests.get(url, params=payload, headers=headers) data = json.loads(res.text) if data['data']: for item in data['data']: print(item['name'], item['price']) ### 回答2: 拼多多是一家知名的电商平台,为了爬取拼多多商品的信息,我们可以使用Python编写一个爬虫程序。以下是一个简单拼多多爬虫代码示例: ```python import requests import json def get_goods_info(keyword): url = 'https://api.pinduoduo.com/api/search/advanced' headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.182 Safari/537.36' } params = { 'keyword': keyword, 'page': 1, 'size': 10 } response = requests.get(url, headers=headers, params=params) result = response.content.decode('utf-8') data = json.loads(result) goods_list = data['goods_list'] for goods in goods_list: goods_name = goods['goods_name'] sales = goods['sales'] price = goods['price'] print(f'商品名称:{goods_name}') print(f'销量:{sales}') print(f'价格:{price}\n') keyword = input('请输入要搜索的关键字:') get_goods_info(keyword) ``` 这段代码中,我们首先需要通过请求拼多多的API获取商品的相关信息。在代码中,我们使用了`requests`库发送GET请求,并传入请求参数`keyword`来搜索指定关键字的商品信息。我们将搜索结果以页数和每页显示的数量进行参数配置。 然后,我们将返回的结果进行解析。使用`json`库将返回的结果转换为Python的字典结构,方便我们获取和处理信息。 最后,遍历商品列表,获取每个商品的名称、销量和价格,并将其打印出来。 使用这段代码,我们可以根据输入的关键字获取拼多多商品的信息。当然,这只是一个简单的示例,实际情况可能会更加复杂,需要根据实际需求进行相应的处理和优化。 ### 回答3: 拼多多是国内一家知名的社交电商平台,用户通过拼团购买商品,价格相对较低。下面是一段简单拼多多爬虫Python代码,用于爬取拼多多商品的信息。 ``` import requests import json def get_product_info(keyword): url = "https://api.pinduoduo.com/api/oak/product/queryByKeyword" headers = { "Referer": "https://m.pinduoduo.com/search", "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36" } params = { "keyword": keyword, "page": 1, "size": 10 } response = requests.get(url, headers=headers, params=params) product_data = json.loads(response.text) if "result" in product_data: for product in product_data["result"]["searchResultVOList"]: product_id = product["goodsId"] product_name = product["goodsName"] product_price = product["groupPrice"] / 100 # 商品价格除以100得到真实价格 print(f"商品ID:{product_id},商品名称:{product_name},商品价格:{product_price}元") else: print("未获取到商品信息") if __name__ == "__main__": keyword = input("请输入要搜索的商品关键字:") get_product_info(keyword) ``` 这段代码使用Pythonrequests库发送HTTP请求,获取商品信息。首先构建请求的URL、请求头和请求参数,然后通过requests.get方法发送GET请求,得到商品数据。接着使用json.loads方法将返回的JSON数据转换成Python对象,再从中提取出商品ID、商品名称和商品价格,并进行简单的数据处理后打印出来。 通过运行此代码,可以根据输入的关键字获取拼多多商品的信息。注意,这只是一个简单的示例,实际爬取商品数据时需要更多的代码来处理分页、异常情况等。
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值