1688/阿里巴巴爬虫案例

爬取1688某店铺内所有商品链接、最低批发价格、商品名称

本文通过某1688店铺的链接,然后爬取该店铺所有商品的基本信息,包括商品链接、最低批发价格及商品的全名。

之后还通过简单的正则表达式从商品全名中解析出商品的货号。

最后将商品信息导入excel中。


本文中未解决的问题是:

  1. 如何从每个商品链接中爬取详细的商品信息。用selenium爬出的网页一直是乱码,requests包根本啥都爬不出来。是否有其他的包可以用?
  2. 1688上某些商品的价格信息被锁,需要登陆才能获取,如何登陆呢?
  3. 1688店铺链接中,商品的排序是否会发生变化。本文假设没有变化。

第一步:导入所需要的包

from selenium import webdriver # 需要驱动文件 selenium包用于爬虫
import pandas as pd # 用于导出数据
import json # json用于解析爬取的网页

第二步:定义selenium爬虫的option和driver

option=webdriver.ChromeOptions() 
option.add_argument('--headless') # 爬取时不自动弹出浏览器
driver=webdriver.Chrome(options=option,executable_path="chromedriver.exe") # executable_path为驱动文件路径

第三步:定义存储商品信息的list

urls = [] # 商品链接
descs = [] # 商品全名
prices = [] # 商品最低批发价格

第四步:找到店铺链接和商品信息的xpath

找到想要爬虫的1688店铺,进入店铺主页

图1

注意上图这个链接只能爬取第一页,还要下拉,随意点一页,然后找到新的链接。
楼主随意点了第三页,发现链接明显变长了。
https://mulan520.1688.com/page/offerlist.htm?spm=a2615.7691456.autotrace-paginator.4.446b1a7487NZNG&tradenumFilter=false&sampleFilter=false&sellerRecommendFilter=false&videoFilter=false&mixFilter=false&privateFilter=false&mobileOfferFilter=%24mobileOfferFilter&groupFilter=false&sortType=tradenumdown&pageNum=3#search-bar

链接最末有一个pageNum=3,也就说我们要如果想爬任意一页,只要将数字换成对应的页码即可

下面是找到展示的每个商品的xpath。

选中价格信息,或者商品名称信息,右击检查
图三

按照上图的方法直接复制xpath即可,以下每件商品的xpath也可以按照类似的方法操作。


更为稳妥的爬虫方法是手动找到几个关键的xpath节点,对于每个节点进行测试,如果不能爬取就报相应的错误。
但是本人水平不行,就只能这样简单粗暴一下了。

第五步:写代码


xpath_all = '//*[@id="search-bar"]/div[2]/div/div/div/ul'
for j in range(1,16):
    tongpei = 'https://mulan520.1688.com/page/offerlist.htm?spm=a2615.7691456.autotrace-paginator.4.446b1a7487NZNG&tradenumFilter=false&\
    sampleFilter=false&sellerRecommendFilter=false&videoFilter=false&mixFilter=false\
    &privateFilter=false&mobileOfferFilter=%24mobileOfferFilter&groupFilter=false&sortType=tradenumdown&pageNum={}#search-bar'.format(j)
    driver.get(url = tongpei)
    req = driver.find_element_by_xpath(xpath_all)
    for i in range(1,17):
        item_url = req.find_element_by_xpath('li[{}]/div/a'.format(str(i))).get_attribute('href')
        full_desc = req.find_element_by_xpath('li[{}]/div/a'.format(str(i))).get_attribute('title')
        try:
            price = req.find_element_by_xpath('li[{}]/div[3]/div/em'.format(str(i))).text
        except:
            price = 'unknown'
        urls.append(item_url)
        descs.append(full_desc)
        prices.append(price)

# 从商品名称中获取货号(如何有的话
import re
ids = []
for name in descs:
    se = re.search(r'[-a-z0-9#]+',name, flags=re.IGNORECASE)
    try:
        shid = se.group(0)
    except:
        shid = "未找到"
    ids.append(shid)
# 创建dataframe
di = {'网页链接': urls, '商品名称': descs, '价格': prices}
final_table = pd.DataFrame(data = di)

最后一步:导出dataframe到excel

final_table.to_excel("hh.xlsx", encoding="utf_8_sig", sheet_name='Sheet1', header=None)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 我发现,在人群里受欢迎的只有两种人,第一种是有利用价值的人,第二种,懦弱无能甘于给别人做陪衬的。 如果一个人,有很...
    海伦城里的小石碗阅读 259评论 0 0
  • 【导师实修四大心法作业】 30天观九念 2021年2月 6 日 观九念第 12天 姓名:滕一楠 一、静心10-3...
    滕一楠桂兰阅读 230评论 0 0
  • 夜莺2517阅读 127,761评论 1 9
  • 版本:ios 1.2.1 亮点: 1.app角标可以实时更新天气温度或选择空气质量,建议处女座就不要选了,不然老想...
    我就是沉沉阅读 6,967评论 1 6
  • 我是一名过去式的高三狗,很可悲,在这三年里我没有恋爱,看着同龄的小伙伴们一对儿一对儿的,我的心不好受。怎么说呢,高...
    小娘纸阅读 3,418评论 4 7