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 相关文章推荐
Mac下Supervisor进程监控管理工具的安装与配置
Dec 16 Python
深入理解python中的select模块
Apr 23 Python
Python使用time模块实现指定时间触发器示例
May 18 Python
Python通过matplotlib绘制动画简单实例
Dec 13 Python
python执行系统命令后获取返回值的几种方式集合
May 12 Python
Django项目使用CircleCI的方法示例
Jul 14 Python
python实现简单图书管理系统
Nov 22 Python
Python内置方法实现字符串的秘钥加解密(推荐)
Dec 09 Python
如何基于Python创建目录文件夹
Dec 31 Python
python 一维二维插值实例
Apr 22 Python
Python虚拟环境virtualenv创建及使用过程图解
Dec 08 Python
python实现监听键盘
Apr 26 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
一个简单的自动发送邮件系统(一)
2006/10/09 PHP
PHP获取当前文件所在目录 getcwd()函数
2009/05/13 PHP
Laravel 5 框架入门(二)构建 Pages 的管理功能
2015/04/09 PHP
PHP实现字符串的全排列详解
2019/04/24 PHP
写入cookie的JavaScript代码库 cookieLibrary.js
2009/10/24 Javascript
高效的表格行背景隔行变色及选定高亮的JS代码
2010/12/04 Javascript
js获取IP和PcName(IE)在vs中可用
2013/08/02 Javascript
javaScript使用EL表达式的几种方式
2014/05/27 Javascript
javascript跨域的方法汇总
2015/10/23 Javascript
Bootstrap创建可折叠的组件
2016/02/23 Javascript
JavaScript中自带的 reduce()方法使用示例详解
2016/08/10 Javascript
Jquery Easyui自定义下拉框组件使用详解(21)
2020/12/31 Javascript
详解基于Vue+Koa的pm2配置
2017/10/24 Javascript
Javascript Promise用法详解
2018/05/10 Javascript
vue之将echart封装为组件
2018/06/02 Javascript
微信小程序之onLaunch与onload异步问题详解
2019/03/28 Javascript
jQuery实现轮播图效果demo
2020/01/11 jQuery
[01:27]2014DOTA2展望TI 剑指西雅图IG战队专访
2014/06/30 DOTA
python爬虫入门教程--快速理解HTTP协议(一)
2017/05/25 Python
Scrapy框架使用的基本知识
2018/10/21 Python
Python对称的二叉树多种思路实现方法
2020/02/28 Python
利用pyecharts读取csv并进行数据统计可视化的实现
2020/04/17 Python
Python使用matplotlib绘制圆形代码实例
2020/05/27 Python
python实现简易版学生成绩管理系统
2020/06/22 Python
Python中pass的作用与使用教程
2020/11/13 Python
Python lxml库的简单介绍及基本使用讲解
2020/12/22 Python
浅谈利用缓存来优化HTML5 Canvas程序的性能
2015/05/12 HTML / CSS
Boom手表官网:瑞典手表品牌,设计你的手表
2019/03/11 全球购物
波兰最早的运动鞋精品店之一:Street Supply
2019/08/29 全球购物
介绍一下SQL Server的全文索引
2013/08/15 面试题
采购内勤岗位职责
2013/12/10 职场文书
旅游管理专业大学生职业规划书
2014/02/27 职场文书
企业厂务公开实施方案
2014/03/26 职场文书
世界遗产导游词
2015/02/13 职场文书
2015年农村党员干部主题教育活动总结
2015/03/25 职场文书
2016年党员读书月活动总结
2016/04/06 职场文书