专栏首页公众号:googpyPython教你挑选礼物

Python教你挑选礼物

阅读文本大概需要5分钟。

又到了一年一度的教师节,每次教师节大家都会烦恼不知道送什么礼物?尤其是对于理工男来说,更是一个让人头大的问题。我今天就和大家分享一个用Python爬取商品信息的项目,希望可以给大家选礼物时提供一个参考。

1.爬取目标

本次项目利用selenium抓取商品信息,用selenium语法来获取商品信息、价格、购买人数、图片、以及店铺的名字,最后再把获取的信息储存在MongoDB中。

2.准备工作

在开始本次项目前,首先你要确保正确安装好Chome浏览器并配置好对应版本的ChromeDriver;另外,还需要正确安装Python的selenium库和pymongo库;最后还要在电脑上安装好MongoDB。

3.下面给出Windows下安装selenium、pymongo、MongoDB的方法

selenium:

pip install selenium   || pip3 install selenium

pymongo:

pip install pymongo   || pip3 install pymongo

MongoDB:

由于MongoDB现在版本比较多,3.0和4.0安装方法存在差异,我下载的是3.x版本的,安装和配置都比较简单,所以,我也建议大家安装和使用3.x版本的。

下载链接:

https://www.mongodb.com/download-center/community

ChromeDriver下载链接:

https://chromedriver.storage.googleapis.com/index.html

这里下载的ChromeDriver版本要和你下载的谷歌浏览器的版本相一致,否则程序运行会出现错误。下载完后将ChromeDriver.exe放到你Python安装路径下的Scripts中即可。

4.提取单页商品信息

获取各个元素用到的是selenium语法的

find_element_by_xpath()

括号中需要填入各元素的Xpath路径。

  • 获取商品信息

代码如下:

'info' : li.find_element_by_xpath('.//div[@class="row row-2 title"]').text
  • 获取价格信息

代码如下:

'price' : li.find_element_by_xpath('.//a[@class="J_ClickStat"]').get_attribute('trace-price') + '元'
  • 获取付款人数

代码如下:

'deal' : li.find_element_by_xpath('.//div[@class="deal-cnt"]').text
  • 获取图片

代码如下:

'image' : li.find_element_by_xpath('.//div[@class="pic"]/a/img').get_attribute('src')
  • 获取店铺名字

代码如下:

'name' : li.find_element_by_xpath('.//div[@class="shop"]/a/span[2]').text

5.提取多页商品信息

经过上面的分析,只能爬取一页的商品信息,我们想获取多页信息,就需要先定义一个函数,将总页数提取出来,代码如下

#提取总页数
def search():
    driver.find_element_by_id('q').send_keys('python')
    driver.find_element_by_class_name("tb-bg").click()
    time.sleep(10)
    token
= driver.find_element_by_xpath(
'//*[@id="mainsrp-pager"]/div/div/div/div[1]'
).text
    token = int(re.compile('\d+').search(token).group(0))
    return token

6.向下滑动页面

我们都知道selenium用来抓取动态渲染的页面非常有效,我们在抓取页面信息时,需要模拟人来操作下拉、翻页等操作。

对于下拉操作,有爬虫基础的可能会想到用selenium模拟的操作,但本次项目我们用js语法来模拟下拉,这样做的好处就是不容易反爬机制识别,代码如下

def drop_down():
    for x in range(1,11,2):
        time.sleep(0.5)
        j = x/10           #滑动到的位置
        js = 'document.documentElement.scrollTop = document.documentElement.scrollHeight * %f' %j
        driver.execute_script(js)

同理,我们也定义一个函数来模拟翻页,代码如下

def next_page():
    token = search()
    num = 0
    while num != token - 1:
        driver.get('https://s.taobao.com/search?q={}&s={}'.format(keyword,44*num))
        driver.implicitly_wait(10)  #隐式等待
        num += 1
        drop_down()
        get_product()

翻页编写时,需要注意,我在代码加入了keyword,意思就是可以根据你自己的需求,爬取不同种类的商品信息。

7.将数据保存至MongoDB

def save_to_mongo(result):
    try:
        if db[MONGO_COLLECTION].insert(result):
            print('储存到MongoDB成功')
    except  Exception:
        print('储存到MongoDB失败')

8.结果展示

由于我能力有限,暂时只能实现这么多功能,下一步准备对MongoDB储存的数据进行分析,这样就完成了从数据爬取——数据储存——数据分析一个完整的过程。如果有感兴趣的小伙伴,后台可以回复「教师节」获取项目源码。

最后,祝所有的老师们:教师节快乐!

本文分享自微信公众号 - googpy(googpy),作者:叫我小包总

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-09-10

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 一份真实的Python面试题

    自学Python已有一段时间了,就想着找份面试题来检验一下自己的学习情况,今天就和大家分享一份自己从网上找到的货真价实的Python面试题,每道题目看似简单,但...

    stormwen
  • 函数和参数

    Python里面有很多内置函数,使用函数可以让我们更快捷得实现要求,但函数那么多,死记硬背肯定不行,就需要我们平时多留心,遇到新的内置函数,多用help指令看看...

    stormwen
  • Python2和3的区别

    学2还是3我想这是每一个初学者都会遇到的难题,我觉得作为一名新手直接上3。Python3是未来的大势所趋,2.7现在只是在维护,不会增加新的功能。

    stormwen
  • 深入selenium模块基础操作

    小小咸鱼YwY
  • Appium+python (3) 元素定位(1)

    用户2149234
  • python教程7--爬取博客访问量

    pip install requests pip install pyquery

    IT云清
  • 前后端高效协作开发的11条建议

    内容来源:作者,深予之 (@senntyou),https://github.com/senntyou/blogs;来自,https://segmentfaul...

    IT大咖说
  • 重新认识原型和原型链二

    知道了prototype这个原型(也叫原型属性、原型对象,不要搞混了,原型、原型属性、原型对象都是同一个东西),我们还需要知道__proto__和constru...

    wade
  • 爬虫系列(9)爬虫的多线程理论以及动态数据的获取方法。

    将将要爬去的url放在一个队列中,这里使用标准库Queue。访问url后的结果保存在结果队列中

    小Gy
  • Amazon后台登陆以及跟卖

    亚马逊模拟登陆,这里使用的是selenium来登陆,并判断是否登陆成功,以及是否有验证码,并破解验证码登陆。

    机器学习和大数据挖掘

扫码关注云+社区

领取腾讯云代金券