python+mongodb数据抓取详细介绍


Posted in Python onOctober 25, 2017

分享点干货!!!

Python数据抓取分析

编程模块:requests,lxml,pymongo,time,BeautifulSoup

首先获取所有产品的分类网址:

def step():
  try:
    headers = {
      。。。。。
      }
    r = requests.get(url,headers,timeout=30)
    html = r.content
    soup = BeautifulSoup(html,"lxml")
    url = soup.find_all(正则表达式)
    for i in url:
      url2 = i.find_all('a')
      for j in url2:
         step1url =url + j['href']
         print step1url
         step2(step1url)
  except Exception,e:
    print e

我们在产品分类的同时需要确定我们所访问的地址是产品还是又一个分类的产品地址(所以需要判断我们访问的地址是否含有if判断标志):

def step2(step1url):
  try:
    headers = {
      。。。。
      }
    r = requests.get(step1url,headers,timeout=30)
    html = r.content
    soup = BeautifulSoup(html,"lxml")
    a = soup.find('div',id='divTbl')
    if a:
      url = soup.find_all('td',class_='S-ITabs')
      for i in url:
        classifyurl = i.find_all('a')
        for j in classifyurl:
           step2url = url + j['href']
           #print step2url
           step3(step2url)
    else:
      postdata(step1url)

当我们if判断后为真则将第二页的分类网址获取到(第一个步骤),否则执行postdata函数,将网页产品地址抓取!

def producturl(url):
  try:
    p1url = doc.xpath(正则表达式)
    for i in xrange(1,len(p1url) + 1):
      p2url = doc.xpath(正则表达式)
      if len(p2url) > 0:
        producturl = url + p2url[0].get('href')
        count = db[table].find({'url':producturl}).count()
        if count <= 0:
            sn = getNewsn()
            db[table].insert({"sn":sn,"url":producturl})
            print str(sn) + 'inserted successfully'
        else:
            'url exist'

  except Exception,e:
    print e

其中为我们所获取到的产品地址并存入mongodb中,sn作为地址的新id。

下面我们需要在mongodb中通过新id索引来获取我们的网址并进行访问,对产品进行数据分析并抓取,将数据更新进数据库内!

其中用到最多的BeautifulSoup这个模块,但是对于存在于js的价值数据使用BeautifulSoup就用起来很吃力,所以对于js中的数据我推荐使用xpath,但是解析网页就需要用到HTML.document_fromstring(url)方法来解析网页。

对于xpath抓取价值数据的同时一定要细心!如果想了解xpath就在下面留言,我会尽快回答!

def parser(sn,url):
  try:
    headers = {
      。。。。。。
      }
    r = requests.get(url, headers=headers,timeout=30)
    html = r.content
    soup = BeautifulSoup(html,"lxml")
    dt = {}
    #partno
    a = soup.find("meta",itemprop="mpn")
    if a:
      dt['partno'] = a['content']
    #manufacturer
    b = soup.find("meta",itemprop="manufacturer")
    if b:
      dt['manufacturer'] = b['content']
    #description
    c = soup.find("span",itemprop="description")
    if c:
      dt['description'] = c.get_text().strip()
    #price
    price = soup.find("table",class_="table table-condensed occalc_pa_table")
    if price:
      cost = {}
      for i in price.find_all('tr'):
        if len(i) > 1:
          td = i.find_all('td')
          key=td[0].get_text().strip().replace(',','')
          val=td[1].get_text().replace(u'\u20ac','').strip()
          if key and val:
            cost[key] = val
      if cost:
        dt['cost'] = cost
        dt['currency'] = 'EUR'
    #quantity
    d = soup.find("input",id="ItemQuantity")
    if d:
      dt['quantity'] = d['value']
    #specs
    e = soup.find("div",class_="row parameter-container")
    if e:
      key1 = []
      val1= []
      for k in e.find_all('dt'):
        key = k.get_text().strip().strip('.')
        if key:
          key1.append(key)
      for i in e.find_all('dd'):
        val = i.get_text().strip()
        if val:
          val1.append(val)
      specs = dict(zip(key1,val1))
    if specs:
      dt['specs'] = specs
      print dt
      
    if dt:
      db[table].update({'sn':sn},{'$set':dt})
      print str(sn) + ' insert successfully'
      time.sleep(3)
    else:
      error(str(sn) + '\t' + url)
  except Exception,e:
    error(str(sn) + '\t' + url)
    print "Don't data!"

最后全部程序运行,将价值数据分析处理并存入数据库中!

以上就是本文关于python+mongodb数据抓取详细介绍的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站:Python探索之创建二叉树、Python探索之修改Python搜索路径、浅谈python中copy和deepcopy中的区别等,有什么问题,欢迎留言一起交流讨论。

Python 相关文章推荐
Python使用multiprocessing创建进程的方法
Jun 04 Python
使用Python实现博客上进行自动翻页
Aug 23 Python
Python_LDA实现方法详解
Oct 25 Python
python K近邻算法的kd树实现
Sep 06 Python
python+flask实现API的方法
Nov 21 Python
Python线程之定位与销毁的实现
Feb 17 Python
python的pytest框架之命令行参数详解(下)
Jun 27 Python
基于python 微信小程序之获取已存在模板消息列表
Aug 05 Python
使用Python制作一个打字训练小工具
Oct 01 Python
python生成器推导式用法简单示例
Oct 08 Python
Python递归实现打印多重列表代码
Feb 27 Python
python将下载到本地m3u8视频合成MP4的代码详解
Nov 24 Python
python装饰器实例大详解
Oct 25 #Python
Python3 模块、包调用&amp;路径详解
Oct 25 #Python
Python探索之创建二叉树
Oct 25 #Python
Python探索之修改Python搜索路径
Oct 25 #Python
python中 logging的使用详解
Oct 25 #Python
python下载文件记录黑名单的实现代码
Oct 24 #Python
基于python中staticmethod和classmethod的区别(详解)
Oct 24 #Python
You might like
linux下为php添加iconv模块的方法
2016/02/28 PHP
javascript密码强度校验代码(两种方法)
2015/08/10 Javascript
浅析2种JavaScript继承方式
2015/12/04 Javascript
Javascript基础学习笔记(菜鸟必看篇)
2016/07/22 Javascript
使用React实现轮播效果组件示例代码
2016/09/05 Javascript
jQuery 插件封装的方法
2016/11/16 Javascript
关于使用axios的一些心得技巧分享
2017/07/02 Javascript
详细分析单线程JS执行问题
2017/11/22 Javascript
微信小程序在其他页面监听globalData中值的变化
2019/07/15 Javascript
layui使用templet格式化表格数据的方法
2019/09/16 Javascript
Vue中keep-alive组件作用详解
2020/02/04 Javascript
Nuxt 项目性能优化调研分析
2020/11/07 Javascript
微信小程序实现倒计时功能
2020/11/19 Javascript
[01:05:12]2014 DOTA2国际邀请赛中国区预选赛 TongFu VS CIS-GAME
2014/05/21 DOTA
python进阶教程之循环相关函数range、enumerate、zip
2014/08/30 Python
python threading模块操作多线程介绍
2015/04/08 Python
Python处理Excel文件实例代码
2017/06/20 Python
python中字符串的操作方法大全
2018/06/03 Python
Python Django 实现简单注册功能过程详解
2019/07/29 Python
python安装cx_Oracle和wxPython的方法
2020/09/14 Python
详解python3 GUI刷屏器(附源码)
2021/02/18 Python
css实例教程 一款纯css3实现的超炫动画背画特效
2014/11/05 HTML / CSS
HTML5 MiranaVideo播放器 (代码开源)
2010/06/11 HTML / CSS
美体小铺美国官网:The Body Shop美国
2017/11/10 全球购物
自然健康的概念:Natural Healthy Concepts
2020/01/26 全球购物
工商学院毕业生个人自我评价
2013/09/19 职场文书
北大研究生linux应用求职信
2013/10/29 职场文书
大学生简历的个人自我评价
2013/12/04 职场文书
企业出纳岗位职责
2014/03/12 职场文书
医学求职自荐信
2014/06/21 职场文书
政府个人对照检查材料思想汇报
2014/10/08 职场文书
2015年元旦主持词开场白
2014/12/14 职场文书
2016年寒假社会实践活动总结
2015/10/10 职场文书
2016保送生自荐信范文
2016/01/29 职场文书
Spring实现内置监听器
2021/07/09 Java/Android
js不常见操作运算符总结
2021/11/20 Javascript