美文网首页潘森sibadapython爬虫实战数据分析
Python爬虫学习(十三)使用selenium爬取淘宝商品

Python爬虫学习(十三)使用selenium爬取淘宝商品

作者: 弃用中 | 来源:发表于2017-09-20 14:49 被阅读1556次

在上文我们学习了一些selenium的知识,本节将使用selenium爬取淘宝商品——美食。

效果大概就是这样:


运行中
目标

打开:https://www.taobao.com,在输入框输入美食搜索后,将搜索到的美食信息,比如说名称,单价,地址,购买人数等信息爬取下来,并保存到MongoDB中。

分析

搜索关键字美食之后,如图



有100页的内容,我们得抓取每一页的信息。观察其URL变化,好像没有发现什么规律。所以,不能按照之前的简单改变URL的方法爬取。

那怎么办呢?
这时,我们可以使用之前学过的selenium的知识,操作浏览器,让其不停的翻页,然后针对每一页,抓取信息。

实践

首先,对于美食而言,具有100个页面,但对于其他一些商品,可不一定。
所以,我们得获取到共有多少页这个信息。

def search_keyword(keyword="美食"):
    try:
        chrome.get('https://www.taobao.com/')
        inputbox = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR,'#q')))
        button = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR,'#J_TSearchForm > div.search-button > button')))
        inputbox.clear()
        inputbox.send_keys(keyword)
        button.click()

        totalPages = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, '#mainsrp-pager > div > div > div > div.total'))).text
        totalPages = re.search('(\d+)', totalPages).group(1)
        return totalPages

    except TimeoutException:
        return search_keyword(keyword)

测试一下效果:



正确得到了结果。

接下来,我们想让浏览器自动翻页。大致思路如下:



如图,每个页面都有一个输入页数的输入框,以及一个确定按钮,我们只需获取输入框元素,传递页数,点击确定按钮即可,而这一切,都可以用selenium实现。值得注意的是,每次一跳转到相应的页面时,有一个表项颜色不一样,如下图:



表示处在哪个页面,如果这个表项与我们传递的页数一致的话,说明已经跳转成功了,下面附上代码:
def next_page(page_number):
    try:
        inputbox = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, '#mainsrp-pager > div > div > div > div.form > input')))
        button = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, '#mainsrp-pager > div > div > div > div.form > span.btn.J_Submit')))
        inputbox.clear()
        inputbox.send_keys(page_number)
        button.click()
        wait.until(EC.text_to_be_present_in_element((By.CSS_SELECTOR, '#mainsrp-pager > div > div > div > ul > li.item.active > span'), str(page_number)))
    except TimeoutException:
        next_page(page_number)

测试一下:


自动调转

成功了!

接下来,就是抓取页面所需的商品信息了,我们依旧使用BeautifulSoup。

def parse_page():
    wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, '#mainsrp-itemlist .items')))
    html = chrome.page_source
    soup = BeautifulSoup(html, 'lxml')
    items = soup.select('#mainsrp-itemlist .items .item')
    for item in items:
        product = {
            'name':item.select('.title')[0].get_text().strip(),
            'price':item.select('.g_price-highlight > strong')[0].get_text(),
            'deal-cnt':item.select('.deal-cnt')[0].get_text(),
            'shop':item.select('.shop')[0].get_text().strip(),
            'location':item.select('.location')[0].get_text()
        }
        print(product)

运行一下,结果如图:


商品信息

最后,把product存入MongoDB即可:

def save_to_DB(item):
    if (collection.insert(item)):
        print('保存成功!')
    else:
        print("保存失败!")

整体运行一下代码:


运行中

查看MongoDB,内容已就位!


MongoDB内容

全部代码在:https://github.com/viljw/PythonSpider/blob/master/taobao.py

以上。


相关文章

网友评论

本文标题:Python爬虫学习(十三)使用selenium爬取淘宝商品

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