Selenium分页爬取淘宝商品信息

这一节利用selenium爬取淘宝商品信息并保存至mongodb数据库

1.分析链接

打开淘宝网,我们在搜索框搜索ipad,产生链接为 https://s.taobao.com/search?q=ipad

需要获取的信息有商品图片,价格,标题,地址等信息,如下图所示。

在这里,我们爬取的页数按照跳转页数计算防止部分界面数据不稳定造成后续爬取失败。

2.代码实现

首先,我们获取商品列表,代码如下:

from selenium import webdriver
from selenium.common.exceptions import  TimeoutException
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait

browser = webdriver.Chrome()
wait = WebDriverWait(browser,12)
KEYWORD = 'ipad'

def index_page(page):  #获得商品列表
    print('正在爬取第',page,'页')
    try:
        url = 'https://s.taobao.com/search?q='+ quote(KEYWORD)
        browser.get(url)
        if page > 1:
            input = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR,'#q')))
            submit = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR,'#mainsrp-pager div.form > span.btn.J_Submit')))
            input.clear()
            input.send_keys(page)
            submit.click()
        wait.until(EC.text_to_be_present_in_element((By.CSS_SELECTOR,'#mainsrp-pager li.item.active > span'),str(page)))
        wait.until(EC.presence_of_element_located((By.CSS_SELECTOR,'.m-itemlist .items .item')))
        get_products()
    except TimeoutException:
        index_page(page)

【代码解读】首先定义搜索框imput和确定按钮submit,通过分页那张图片我们可以定位到这两个位置,可通过开发者选项,在浏览器“搜索框”处右键“检查”,查看element选项卡,查找元素位置,后面的元素定位均用此方法。然后搜索框清空,再输入page,模拟点击按钮进行搜索。

点击之后,判断当前页面是否大于1,即text_to_be_present_in_elements,判断方法为页码高亮处的数字与输入的跳转页面比较。之后等待商品信息加载出来,即presence_of_element_located。最后利用get_products()方法解析商品数据。

from pyquery import PyQuery as pq

def get_products():   #提取商品数据
    html = browser.page_source
    doc = pq(html)
    items = doc('#mainsrp-itemlist .items .item').items()
    for item in items:
        product = {
            'image':item.find('.pic .img').attr('data-src'),   #商品图片
            'price':item.find('.price').text(),          #价格
            'deal':item.find('.deal-cnt').text(),              #付款人数
            'title':item.find('.title').text(),          #商品标题
            'shop':item.find('.shop').text(),         #店铺名称
            'location':item.find('.location').text()            #地址
        }
        print(product)
        #save_to_mongo(product)

最后,遍历每页,调用main()方法即可,代码如下:

def main():
    for i in range(1,3):
         index_page(i)
    browser.close()

if __name__ == '__main__':
    main()

pycharm数据运行如下:

MongoDB运行截图如下:

注:MongoDB数据库相关代码在本文中已被注释

本节代码已上传至github:https://github.com/lizeyang18/Pythpn3WebSpiser-taobao

学习永无止境,感谢阅读~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值