这是一个Python爬虫代码,用于在京东网站上抓取笔记本电脑的商品信息。主要包括以下步骤:

  1. 导入requests、lxml、time和csv模块。

  2. 定义一个函数crow_first(n),用于抓取每一页前30条商品信息。其中,n表示第几页。

  3. 构造每一页的url变化,并设置请求头。

  4. 发送GET请求,获取响应内容,并指定编码方式为utf-8。

  5. 使用lxml库解析响应内容,定位到每一个商品标签li,并抓取商品的sku、价格、名称、图片和店铺名称等信息。

  6. 将抓取的结果保存到本地CSV文件中。

  7. 在主程序中,循环抓取1到10页的商品信息,并打印出当前抓到第几页了。

  8. 如果抓取过程中出现异常,则打印异常信息。

import requests
from lxml import etree
import time
import csv
#定义函数抓取每页前30条商品信息
def crow_first(n):
    #构造每一页的url变化
    url='https://search.jd.com/search?keyword=笔记本电脑&qrst=1&stock=1&stock=1&enc=utf-8&qrst=1&rt=1&stop=1&vt=2&stock=1&page='+str(n)+'&s='+str(1+(n-1)*30)+'&click=0&scrolling=y'
    head = {'authority': 'search.jd.com',
            'method': 'GET',
            # 'path': '/s_new.php?keyword=%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%B1%BB%E5%9B%BE%E4%B9%A6&enc=utf-8&qrst=1&rt=1&stop=1&vt=2&wq=%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%B1%BB%E5%9B%BE%E4%B9%A6&page=4&s=84&scrolling=y&log_id=1529828108.22071&tpl=3_M&show_items=7651927,7367120,7056868,7419252,6001239,5934182,4554969,3893501,7421462,6577495,26480543553,7345757,4483120,6176077,6932795,7336429,5963066,5283387,25722468892,7425622,4768461',
            'scheme': 'https',
            # 'referer': 'https://search.jd.com/Search?keyword=%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%B1%BB%E5%9B%BE%E4%B9%A6&enc=utf-8&qrst=1&rt=1&stop=1&vt=2&wq=%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%B1%BB%E5%9B%BE%E4%B9%A6&page=3&s=58&click=0',
            'user-agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.139 Safari/537.36',
            'x-requested-with': 'XMLHttpRequest',
            'Cookie':'qrsc=3; pinId=RAGa4xMoVrs; xtest=1210.cf6b6759; ipLocation=%u5E7F%u4E1C; _jrda=5; TrackID=1aUdbc9HHS2MdEzabuYEyED1iDJaLWwBAfGBfyIHJZCLWKfWaB_KHKIMX9Vj9_2wUakxuSLAO9AFtB2U0SsAD-mXIh5rIfuDiSHSNhZcsJvg; shshshfpa=17943c91-d534-104f-a035-6e1719740bb6-1525571955; shshshfpb=2f200f7c5265e4af999b95b20d90e6618559f7251020a80ea1aee61500; cn=0; 3AB9D23F7A4B3C9B=QFOFIDQSIC7TZDQ7U4RPNYNFQN7S26SFCQQGTC3YU5UZQJZUBNPEXMX7O3R7SIRBTTJ72AXC4S3IJ46ESBLTNHD37U; ipLoc-djd=19-1607-3638-3638.608841570; __jdu=930036140; user-key=31a7628c-a9b2-44b0-8147-f10a9e597d6f; areaId=19; __jdv=122270672|direct|-|none|-|1529893590075; PCSYCityID=25; mt_xid=V2_52007VwsQU1xaVVoaSClUA2YLEAdbWk5YSk9MQAA0BBZOVQ0ADwNLGlUAZwQXVQpaAlkvShhcDHsCFU5eXENaGkIZWg5nAyJQbVhiWR9BGlUNZwoWYl1dVF0%3D; __jdc=122270672; shshshfp=72ec41b59960ea9a26956307465948f6; rkv=V0700; __jda=122270672.930036140.-.1529979524.1529984840.85; __jdb=122270672.1.930036140|85.1529984840; shshshsID=f797fbad20f4e576e9c30d1c381ecbb1_1_1529984840145'
            }
    r = requests.get(url, headers=head)
    #指定编码方式,不然会出现乱码
    r.encoding='utf-8'
    html1 = etree.HTML(r.text)
    #定位到每一个商品标签li
    datas=html1.xpath('//li[contains(@class,'gl-item')]')
    #将抓取的结果保存到本地CSV文件中
    with open('csv/JD_笔记本电脑.csv','a',newline='',encoding='utf-8-sig')as f:
        write=csv.writer(f)
        for data in datas:
            sku = data.xpath('@data-sku')
            p_price = data.xpath('div/div[@class='p-price']/strong/i/text()')
            p_name = data.xpath('div/div[@class='p-name p-name-type-2']/a/em')
            p_img = data.xpath('div/div[@class='p-img']/a/img/@data-lazy-img')
            p_shop_name = data.xpath('div/div[@class='p-shopnum']/a')
            print(p_name[0].xpath('string(.)'),p_price)
            if len(p_shop_name) == 0:
                shop_name = ''
            else:
                shop_name = p_shop_name[0].text
            #这个if判断用来处理那些价格可以动态切换的商品,比如上文提到的小米MIX2,他们的价格位置在属性中放了一个最低价
            if len(p_price) == 0:
                p_price = data.xpath('div/div[@class='p-price']/strong/@data-price')
                #xpath('string(.)')用来解析混夹在几个标签中的文本
            r2 = requests.get('https://club.jd.com/comment/productCommentSummaries.action?referenceIds='+sku[0])
            write.writerow(['京东',p_name[0].xpath('string(.)'), p_price[0],shop_name,r2.json()['CommentsCount'][0]['CommentCountStr'],p_img[0],3])
    f.close()
 
if __name__=='__main__':
    for i in range(1,11):
        #下面的print函数主要是为了方便查看当前抓到第几页了
        print('***************************************************')
        try:
            print('   First_Page:   ' + str(i))
            crow_first(i)
            print('   Finish')
        except Exception as e:
            print(e)
        # print('------------------')
        # try:
        #     print('   Last_Page:   ' + str(i))
        #     crow_last(i)
        #     print('   Finish')
        # except Exception as e:
        #     print(e)

代码解释:

  • 代码首先导入必要的库,包括requests、lxml、time和csv。
  • 然后定义函数crow_first(n),用于抓取每一页前30条商品信息。
  • 函数中首先构造每一页的url,并设置请求头。
  • 然后发送GET请求获取网页内容,并指定编码方式为utf-8。
  • 接着使用lxml库解析网页内容,定位到每一个商品标签li,并抓取商品的sku、价格、名称、图片和店铺名称等信息。
  • 最后将抓取的结果保存到本地CSV文件中。
  • 在主程序中,循环抓取1到10页的商品信息,并打印出当前抓到第几页了。
  • 如果抓取过程中出现异常,则打印异常信息。

这个代码示例简单易懂,可以帮助你入门Python爬虫,并了解如何抓取网页数据并保存到本地文件中。

京东笔记本电脑爬虫代码:抓取商品信息并保存到CSV

原文地址: https://www.cveoy.top/t/topic/nTHy 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录