博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
爬虫实例---爬取某东商品信息(附完整代码)
阅读量:4166 次
发布时间:2019-05-26

本文共 5464 字,大约阅读时间需要 18 分钟。

前言

爬取某东商品信息,https://www.jd.com/。

实际上就是模拟人如何使用京东网页去搜索相应的商品,然后股东鼠标加载出所有的商品信息,然后同过网页解析得到想要的商品信息。
商品信息包含,商品名字、价格、销量、商品评价数、店铺名字,甚至商品链接。这也是做数据分析所需的,比如说,你拿到了信息之后,是不是可以通过数据分析,找到价格和销量的关系,比如说分析哪个价位的商品销量最好,那就可以去调整相应的店铺相应的不同价位商品的配置数量。

一、分析网站

1.目标网站分析

在这里插入图片描述

可以看到我们需要向输入框传入我们的想要搜索的商品名字;然后点击搜索。
以笔记本为例,但是加载出来的网页其实是一种懒加载模式,就是如果你不滚懂鼠标,加载的商品信息是不全面的,所以我们还需要模拟鼠标滚动。
在这里插入图片描述
加载出所有的商品之后,我们可以看到商品都是在id="J_goodsList"里面的<li标签里面,class = gl-item。
在这里插入图片描述

然后当你得到一页商品信息之后,还需要翻页,进行第二页信息的抓取。

在这里插入图片描述

2.引入库

from selenium import webdriverfrom selenium.webdriver.common.by import Byfrom selenium.webdriver.support.ui import WebDriverWaitfrom selenium.webdriver.support import expected_conditions as EC

二、使用步骤

1.搜索商品

使用css选择器,获取相应的标签的

在这里插入图片描述

def get_search():    driver.get('https://www.jd.com/')    #输入内容,通过css选择器输入    input = wait.until(        EC.presence_of_element_located((By.CSS_SELECTOR, "#key"))    )    #输入之后点击按钮提交    submit = WebDriverWait(driver, 12).until(        EC.element_to_be_clickable((By.CSS_SELECTOR, '#search > div > div.form > button > i')))    input.send_keys('笔记本')    submit.click()    #翻页    driver.implicitly_wait(10)  # 浏览器的隐式等待(弹性等待)-->死等    driver.maximize_window()  # 最大化浏览器    drop_down()#加上翻页

2.滚动鼠标

#懒加载,滚动鼠标才会加载数据;模拟滚动鼠标def drop_down():    '''模拟滚动鼠标加载数据'''    for i in range(1,20,5):        time.sleep(0.5)        j = i / 20        #这一行是js代码,获取滚动条的长度        js = 'document.documentElement.scrollTop = document.documentElement.scrollHeight * %f' % j        driver.execute_script(js)

3.解析商品,获取信息

以商品价格为例,价格信息是在class = "p-price"类的<strong标签中的<i标签中。

在这里插入图片描述

def get_products():    '''解析商品信息'''    lis = driver.find_elements_by_css_selector('.gl-item')    for li in lis:        try:            product = {
'name': li.find_element_by_css_selector('div.p-name a em').text , # 商品名字 #'image': li.find_element_by_css_selector('div.p-img a').text, 'price': li.find_element_by_css_selector('div.p-price strong i').text + '元' , # 商品名字 'deal': li.find_element_by_css_selector('div.p-commit strong a').text, 'title': li.find_element_by_css_selector('span.J_im_icon a').text, #'location': item.find('.location').text(), } print(product) except Exception as er: print(er)

4.翻页

找到下一页,点击即可。

def next_page():    '''找到下一页的标签,点击'''    driver.find_element_by_css_selector('#J_bottomPage > span.p-num > a.pn-next > em').click()    driver.implicitly_wait(20)

5.循环爬取

def main():    get_search()    for i in range(2):  #爬取多少页        get_products()        next_page()        drop_down()if __name__ == '__main__':    main()

爬取结果:

在这里插入图片描述

6.完整代码

from selenium import webdriverfrom selenium.webdriver.common.by import Byfrom selenium.webdriver.support.ui import WebDriverWaitfrom selenium.webdriver.support import expected_conditions as EC'''平时怎么使用浏览器,代码逻辑就怎么写'''driver = webdriver.Chrome()wait = WebDriverWait(driver, 10)def get_search():    driver.get('https://www.jd.com/')    #输入内容,通过css选择器输入    input = wait.until(        EC.presence_of_element_located((By.CSS_SELECTOR, "#key"))    )    #输入之后点击按钮提交    submit = WebDriverWait(driver, 12).until(        EC.element_to_be_clickable((By.CSS_SELECTOR, '#search > div > div.form > button > i')))    input.send_keys('笔记本')    submit.click()    #翻页    driver.implicitly_wait(10)  # 浏览器的隐式等待(弹性等待)-->死等    driver.maximize_window()  # 最大化浏览器    drop_down()def get_products():    '''解析商品信息'''    lis = driver.find_elements_by_css_selector('.gl-item')    for li in lis:        try:            product = {
'name': li.find_element_by_css_selector('div.p-name a em').text , # 商品名字 #'image': li.find_element_by_css_selector('div.p-img a').text, 'price': li.find_element_by_css_selector('div.p-price strong i').text + '元' , # 商品名字 'deal': li.find_element_by_css_selector('div.p-commit strong a').text, 'title': li.find_element_by_css_selector('span.J_im_icon a').text, #'location': item.find('.location').text(), } print(product) except Exception as er: print(er)#懒加载,滚动鼠标才会加载数据;模拟滚动鼠标def drop_down(): '''模拟滚动鼠标加载数据''' for i in range(1,20,5): time.sleep(0.5) j = i / 20 js = 'document.documentElement.scrollTop = document.documentElement.scrollHeight * %f' % j driver.execute_script(js)#这个函数爬取信息之后可以将数据保存为csv文件,使用的时候记得,import csvdef parse_product(): '''解析商品信息''' lis = driver.find_elements_by_css_selector('.gl-item') for li in lis: try: name = li.find_element_by_css_selector('div.p-name a em').text #商品名字 price = li.find_element_by_css_selector('div.p-price strong i').text + '元' # 商品名字 deal = li.find_element_by_css_selector('div.p-commit strong a').text # title = li.find_element_by_css_selector('span.J_im_icon a').text #店铺名字 print(name,price,deal,title) #print(name,price,deal) #with open('data.csv',mode='a',encoding='utf-8',newline='') as f: # csv_write =csv.writer(f) # csv_write.writerow(name,price,deal,title) except Exception as e: print(e)def next_page(): '''找到下一页的标签,点击''' driver.find_element_by_css_selector('#J_bottomPage > span.p-num > a.pn-next > em').click() driver.implicitly_wait(20)def main(): get_search() for i in range(2): #爬取多少页 get_products() next_page() drop_down()if __name__ == '__main__': main()

转载地址:http://iqoxi.baihongyu.com/

你可能感兴趣的文章
Linux 下 C++ 创建文件夹
查看>>
ubuntu C++ 读取文件夹下所有文件的文件名
查看>>
Ubuntu下问题 : undefined reference to `compress2‘ 的解决办法
查看>>
Ubuntu 12.04 LTS 安装 MATLAB2012a
查看>>
Ubuntu 12.04 64 位版本运行32位可执行文件
查看>>
哈希表(Hash Table)-哈希概述
查看>>
Filebench的安装及使用
查看>>
Ubuntu下 E: Could not get lock /var/lib/apt/lists/lock - open (11: Recource temporarily unavailable)
查看>>
Linux-mmap映射物理内存到用户空间
查看>>
Ext4文件系统三种日志模式——journal、ordered、writeback
查看>>
Linux挂载ext4根文件系统为journal模式
查看>>
linux内核引导参数解析及添加
查看>>
长短期记忆人工神经网络(LSTM)及其tensorflow代码应用
查看>>
长短期记忆人工神经网络(LSTM)网络学习资料
查看>>
运行网络中搜寻到的python程序代码——以长短期记忆人工神经网络(lstm)python代码为例
查看>>
闪存文件系统(Flash File System)
查看>>
WinMIPS64工具进行MIPS指令集实验(一)
查看>>
WinMIPS64工具进行MIPS指令集实验(二)
查看>>
Linux上快速入门英特尔Optane DC Persistent Memory Module的配置与使用
查看>>
Intel Optane DC Persistent Memory Module (PMM)详解
查看>>