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的Twisted框架编写简单的网络客户端
Apr 16 Python
Python之多线程爬虫抓取网页图片的示例代码
Jan 10 Python
Python入门学习指南分享
Apr 11 Python
浅谈Series和DataFrame中的sort_index方法
Jun 07 Python
python 搭建简单的http server,可直接post文件的实例
Jan 03 Python
Python直接赋值、浅拷贝与深度拷贝实例分析
Jun 18 Python
Django实现发送邮件功能
Jul 18 Python
Python在cmd上打印彩色文字实现过程详解
Aug 07 Python
Python中的list与tuple集合区别解析
Oct 12 Python
Python实现猜年龄游戏代码实例
Mar 25 Python
python爬虫实例之获取动漫截图
May 31 Python
实例代码讲解Python 线程池
Aug 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
无线电广播的开始
2002/01/30 无线电
编写php应用程序实现摘要式身份验证的方法详解
2013/06/08 PHP
php简单生成一组与多组随机字符串的方法
2017/05/09 PHP
PHP实现对xml进行简单的增删改查(CRUD)操作示例
2017/05/19 PHP
实例讲解YII2中多表关联的使用方法
2017/07/21 PHP
PHP数组去重的更快实现方式分析
2018/05/09 PHP
浅谈javascript 面向对象编程
2009/10/28 Javascript
Js切换功能的简单方法
2010/11/23 Javascript
20款效果非常棒的 jQuery 插件小结分享
2011/11/18 Javascript
巧用replace将文字表情替换为图片
2014/04/17 Javascript
js判断元素是否隐藏的方法
2014/06/09 Javascript
js控制元素显示在屏幕固定位置及监听屏幕高度变化的方法
2015/08/11 Javascript
14款经典网页图片和文字特效的jQuery插件-前端开发必备
2015/08/25 Javascript
不得不分享的JavaScript常用方法函数集(上)
2015/12/23 Javascript
prototype与__proto__区别详细介绍
2017/01/09 Javascript
Angular多选、全选、批量选择操作实例代码
2017/03/10 Javascript
基于EasyUI的基础之上实现树形功能菜单
2017/06/28 Javascript
NodeJS实现图片上传代码(Express)
2017/06/30 NodeJs
JavaScript实现区块链
2018/03/14 Javascript
react antd表格中渲染一张或多张图片的实例
2020/10/28 Javascript
Python的内存泄漏及gc模块的使用分析
2014/07/16 Python
Python通过解析网页实现看报程序的方法
2014/08/04 Python
python中assert用法实例分析
2015/04/30 Python
在Python中的Django框架中进行字符串翻译
2015/07/27 Python
在Python中通过getattr获取对象引用的方法
2019/01/21 Python
解决pip安装的第三方包在PyCharm无法导入的问题
2020/10/15 Python
canvas实现按住鼠标移动绘制出轨迹的示例代码
2018/02/05 HTML / CSS
OSPREY LONDON官网:英国本土皮具品牌
2019/05/31 全球购物
环保建议书
2014/03/12 职场文书
2015年转正工作总结范文
2015/04/02 职场文书
通知函格式范文
2015/04/27 职场文书
2015年度校学生会工作总结报告
2015/05/23 职场文书
大一新生军训新闻稿
2015/07/17 职场文书
JS监听Esc 键触发事键
2021/04/14 Javascript
Centos环境下Postgresql 安装配置及环境变量配置技巧
2021/05/18 PostgreSQL
MySQL8.0 Undo Tablespace管理详解
2022/06/16 MySQL