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 相关文章推荐
TensorFlow高效读取数据的方法示例
Feb 06 Python
使用Django启动命令行及执行脚本的方法
May 29 Python
解决Python print输出不换行没空格的问题
Nov 14 Python
python使用pygame模块实现坦克大战游戏
Mar 25 Python
Django实现微信小程序的登录验证功能并维护登录态
Jul 04 Python
python单例模式原理与创建方法实例分析
Oct 26 Python
Python requests获取网页常用方法解析
Feb 20 Python
Python中实现一行拆多行和多行并一行的示例代码
Sep 06 Python
Python基于locals返回作用域字典
Oct 17 Python
django使用channels实现通信的示例
Oct 19 Python
Python+Matplotlib+LaTeX玩转数学公式
Feb 24 Python
python小型的音频操作库mp3Play
Apr 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
PHP初学者最感迷茫的问题小结
2010/03/27 PHP
CURL状态码列表(详细)
2013/06/27 PHP
php微信公众号开发之简答题
2018/10/20 PHP
Span元素的width属性无效果原因及解决方案
2010/01/15 Javascript
jQuery中验证表单提交方式及序列化表单内容的实现
2014/01/06 Javascript
jQuery实现带滚动导航效果的全屏滚动相册实例
2015/06/19 Javascript
详解js图片轮播效果实现原理
2015/12/17 Javascript
jquery中cookie用法实例详解(获取,存储,删除等)
2016/01/04 Javascript
jQuery ajaxSubmit 实现ajax提交表单局部刷新
2016/07/04 Javascript
nodeJs内存泄漏问题详解
2016/09/05 NodeJs
AngularJS入门教程之与服务器(Ajax)交互操作示例【附完整demo源码下载】
2016/11/02 Javascript
js 函数式编程学习笔记
2017/03/25 Javascript
微信小程序 聊天室简单实现
2017/04/19 Javascript
web3.js增加eth.getRawTransactionByHash(txhash)方法步骤
2018/03/15 Javascript
微信小程序自定义组件封装及父子间组件传值的方法
2018/08/28 Javascript
解决js相同的正则多次调用test()返回的值却不同的问题
2018/10/10 Javascript
详解微信小程序图片地扯转base64解决方案
2019/08/18 Javascript
seajs和requirejs模块化简单案例分析
2019/08/26 Javascript
JavaScript TAB栏切换效果的示例
2020/11/05 Javascript
python学习之第三方包安装方法(两种方法)
2015/07/30 Python
Python打包可执行文件的方法详解
2016/09/19 Python
CentOS 6.X系统下升级Python2.6到Python2.7 的方法
2016/10/12 Python
利用Python读取文件的四种不同方法比对
2017/05/18 Python
Python基于FTP模块实现ftp文件上传操作示例
2018/04/23 Python
python 接收处理外带的参数方法
2018/12/03 Python
Python while循环使用else语句代码实例
2020/02/07 Python
Python异常继承关系和自定义异常实现代码实例
2020/02/20 Python
Python爬虫之爬取淘女郎照片示例详解
2020/07/28 Python
python利用faker库批量生成测试数据
2020/10/15 Python
巴西最大的玩具连锁店:Ri Happy
2020/06/17 全球购物
路政管理专业个人自荐信范文
2013/11/30 职场文书
英文自我鉴定
2013/12/10 职场文书
元旦联欢会策划方案
2014/06/11 职场文书
后备干部推荐材料
2014/12/24 职场文书
导师对论文的学术评语
2015/01/04 职场文书
赤壁观后感(2)
2015/06/15 职场文书