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实现DNS正向查询、反向查询的例子
Apr 25 Python
Python内置函数的用法实例教程
Sep 08 Python
举例讲解Python的lambda语句声明匿名函数的用法
Jul 01 Python
python3.6+django2.0开发一套学员管理系统
Mar 03 Python
利用python循环创建多个文件的方法
Oct 25 Python
pygame游戏之旅 添加键盘按键的方法
Nov 20 Python
Pythony运维入门之Socket网络编程详解
Apr 15 Python
python实现接口并发测试脚本
Jun 25 Python
django的csrf实现过程详解
Jul 26 Python
python代码 FTP备份交换机配置脚本实例解析
Aug 01 Python
Python DataFrame一列拆成多列以及一行拆成多行
Aug 06 Python
解决Pytorch半精度浮点型网络训练的问题
May 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制作静态网站的模板框架(四)
2006/10/09 PHP
php读取mysql中文数据出现乱码的解决方法
2013/08/16 PHP
PHP用PDO如何封装简单易用的DB类详解
2017/07/30 PHP
js中更短的 Array 类型转换
2011/10/30 Javascript
jquery miniui 教程 表格控件 合并单元格应用
2012/11/25 Javascript
原生js和jquery实现图片轮播淡入淡出效果
2015/04/23 Javascript
一张Web前端的思维导图分享
2015/07/03 Javascript
javascript实现图片延迟加载方法汇总(三种方法)
2015/08/27 Javascript
利用AngularJs实现京东首页轮播图效果
2016/09/08 Javascript
webpack实用小功能介绍
2018/01/02 Javascript
vue2.0组件之间传值、通信的多种方式(干货)
2018/02/10 Javascript
Angular中使用better-scroll插件的方法
2018/03/27 Javascript
jQuery zTree插件使用简单教程
2019/08/16 jQuery
vue 更改连接后台的api示例
2019/11/11 Javascript
微信小程序实现一个简单swiper代码实例
2019/12/30 Javascript
vue中使用WX-JSSDK的两种方法(推荐)
2020/01/18 Javascript
Vue axios获取token临时令牌封装案例
2020/09/11 Javascript
pandas进行时间数据的转换和计算时间差并提取年月日
2019/07/06 Python
python创建n行m列数组示例
2019/12/02 Python
Django框架教程之中间件MiddleWare浅析
2019/12/29 Python
python实现的批量分析xml标签中各个类别个数功能示例
2019/12/30 Python
HTML里显示pdf、word、xls、ppt的方法示例
2020/04/14 HTML / CSS
美国在线眼镜商城:Eyeglasses.com
2017/06/26 全球购物
P D PAOLA意大利官网:西班牙著名的珠宝首饰品牌
2019/09/24 全球购物
在子网210.27.48.21/30种有多少个可用地址?分别是什么?
2014/07/27 面试题
幼儿园消防安全制度
2014/01/26 职场文书
人民教师求职自荐信
2014/03/12 职场文书
《李时珍夜宿古寺》教学反思
2014/04/09 职场文书
党员群众路线学习心得体会
2014/11/04 职场文书
小学一年级数学教学计划
2015/01/20 职场文书
城南旧事读书笔记
2015/06/29 职场文书
2016幼儿教师自荐信范文
2016/01/28 职场文书
2019年国庆祝福语(70句)
2019/09/19 职场文书
原生JavaScript实现简单五子棋游戏
2021/06/28 Javascript
浅谈自定义校验注解ConstraintValidator
2021/06/30 Java/Android
Mac电脑OS系统下安装Nginx的详细教程
2022/04/14 Servers