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去掉字符串中重复字符的方法
Feb 27 Python
查看Python安装路径以及安装包路径小技巧
Apr 28 Python
Python的迭代器和生成器
Jul 29 Python
Python设置Socket代理及实现远程摄像头控制的例子
Nov 13 Python
简要讲解Python编程中线程的创建与锁的使用
Feb 28 Python
python实现蒙特卡罗方法教程
Jan 28 Python
python微信聊天机器人改进版(定时或触发抓取天气预报、励志语录等,向好友推送)
Apr 25 Python
详解Python3之数据指纹MD5校验与对比
Jun 11 Python
python opencv 批量改变图片的尺寸大小的方法
Jun 28 Python
python利用tkinter实现屏保
Jul 30 Python
python实现画图工具
Aug 27 Python
用Python实现屏幕截图详解
Jan 22 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函数与传递参数实例分析
2014/11/15 PHP
php实现随机生成易于记忆的密码
2015/06/19 PHP
php实现阳历阴历互转的方法
2015/10/28 PHP
PHP判断手机是IOS还是Android
2015/12/09 PHP
如何实现动态删除javascript函数
2007/05/27 Javascript
ASP.NET jQuery 实例7 通过jQuery来获取DropDownList的Text/Value属性值
2012/02/03 Javascript
js二维数组排序的简单示例代码
2014/01/24 Javascript
js replace替换所有匹配的字符串
2014/02/13 Javascript
js style动态设置table高度
2014/10/21 Javascript
jQuery实现数字加减效果汇总
2014/12/16 Javascript
在Node.js中使用HTTP上传文件的方法
2015/06/23 Javascript
JQuery Ajax 异步操作之动态添加节点功能
2017/05/24 jQuery
基于JavaScript实现带数据验证和复选框的表单提交
2017/08/23 Javascript
详解用Webpack与Babel配置ES6开发环境
2019/03/12 Javascript
js console.log打印对象时属性缺失的解决方法
2019/05/23 Javascript
nuxt踩坑之Vuex状态树的模块方式使用详解
2019/09/06 Javascript
js实现上传按钮并显示缩略图小轮子
2020/05/04 Javascript
python3实现抓取网页资源的 N 种方法
2017/05/02 Python
Python统计一个字符串中每个字符出现了多少次的方法【字符串转换为列表再统计】
2019/05/05 Python
Python企业编码生成系统之系统主要函数设计详解
2019/07/26 Python
python学生信息管理系统实现代码
2019/12/17 Python
python求一个字符串的所有排列的实现方法
2020/02/04 Python
python模拟点击网页按钮实现方法
2020/02/25 Python
如何理解python面向对象编程
2020/06/01 Python
Eagle Eyes Optics鹰眼光学:高性能太阳镜
2018/12/07 全球购物
铭宣海淘转运:美国、日本、英国转运等全球转运公司
2019/09/10 全球购物
北美最大的零售退货翻新商:VIP Outlet
2019/11/21 全球购物
客户表扬信范文
2014/01/10 职场文书
企业军训感想
2014/02/07 职场文书
单方离婚协议书范本(2014版)
2014/09/30 职场文书
六一儿童节标语
2014/10/08 职场文书
出纳岗位职责
2015/01/31 职场文书
财务稽核岗位职责
2015/04/13 职场文书
公司出差管理制度范本
2015/08/05 职场文书
环保建议书作文500字
2015/09/14 职场文书
Python采集爬取京东商品信息和评论并存入MySQL
2022/04/12 Python