爬取京东商品信息

作者: _weber_ | 来源:发表于2017-02-06 11:34 被阅读129次
    功能

    从京东商城的商品列表页面解析出商品详情页链接,进而解析出商品名称,编号,店铺,品类等信息

    代码片段及说明
    • 模块导入
      使用requests和Beautifulsoup进行网页解析
      time模块来限制爬取频率,以免被封
    import requests
    from bs4 import BeautifulSoup
    import time
    
    • 函数get_detail_urls()
      以商品列表页地址为输入参数,解析出商品详情页的地址,保存在列表中并返回
    def get_detail_urls(list_url):
        """从商品列表页list_url解析出商品详情页detail_urls"""
        time.sleep(2)
        res = requests.get(list_url)
        soup = BeautifulSoup(res.text, 'lxml')
        data = soup.select('div.jDesc > a')
        detail_urls = []
        for detail_url in data:
            detail_urls.append(detail_url.get('href'))
        return detail_urls
    
    • 函数get_detail()
      以详情页地址为输入参数,获取商品名称,编号,店铺和分类信息,保存在字典中并返回
    def get_detail(detail_url):
        """从商品详情页获取商品名称,编号,店铺和分类信息"""
        time.sleep(2)
        res = requests.get(detail_url)
        soup = BeautifulSoup(res.text, 'lxml')
        sku_name = soup.select('div.p-parameter > ul > li:nth-of-type(1)')[0].get_text().split(':')[-1]
        sku_num = soup.select('div.p-parameter > ul > li:nth-of-type(2)')[0].get_text().split(':')[-1]
        shop = soup.select('div.p-parameter > ul > li:nth-of-type(3)')[0].get_text().split(':')[-1]
        cate_tmp = soup.select('div.p-parameter > ul > li:nth-of-type(5)')
        if cate_tmp != []:
            cate = cate_tmp[0].get_text().split(':')[-1]
        else: cate = cate_tmp
        data = {
            'sku_name':sku_name,
            'sku_num':sku_num,
            'shop':shop,
            'cate':cate,
            }
        return data
    
    • 运行
      因为京东有反爬措施,不能直接使用地址栏中的地址,通过分析js文件找到如下list_urls的真实地址,改变pageNo值即可顺序爬取全部页面。
      这里我爬取的是服务产品页面的信息,其他产品可能略有差异,请参考使用。
    if __name__ == '__main__':
        list_urls = ['https://module-jshop.jd.com/module/getModuleHtml.html?appId=496014&orderBy=3&pageNo={}' \
                     '&direction=1&categoryId=0&pageSize=24&pagePrototypeId=8&pageInstanceId=27448388&moduleInstanceId=27448395' \
                     '&prototypeId=68&templateId=401682&layoutInstanceId=27448395&origin=0&shopId=162403&venderId=167694'.format(str(i)) for i in range(1, 100)]
        detail_urls = []
        for list_url in list_urls:
            detail_urls.extend(get_detail_urls(list_url))
        for detail_url in detail_urls:
            data = get_detail('https:' + detail_url)
            data['detail_url'] = 'https:' + detail_url
            print(data)
    
    输出结果
    京东商品信息

    相关文章

      网友评论

        本文标题:爬取京东商品信息

        本文链接:https://www.haomeiwen.com/subject/rhiyittx.html