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算法学习之计数排序实例
Dec 18 Python
对python内置map和six.moves.map的区别详解
Dec 19 Python
使用Python的SymPy库解决数学运算问题的方法
Mar 27 Python
Python3.5常见内置方法参数用法实例详解
Apr 29 Python
Python正则表达式匹配日期与时间的方法
Jul 07 Python
Python 解决OPEN读文件报错 ,路径以及r的问题
Dec 19 Python
基于MSELoss()与CrossEntropyLoss()的区别详解
Jan 02 Python
Pytorch 实现冻结指定卷积层的参数
Jan 06 Python
python3+opencv生成不规则黑白mask实例
Feb 19 Python
Pytorch mask-rcnn 实现细节分享
Jun 24 Python
Selenium alert 弹窗处理的示例代码
Aug 06 Python
linux centos 7.x 安装 python3.x 替换 python2.x的过程解析
Dec 14 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
【星际争霸1】人族1v7家ZBath
2020/03/04 星际争霸
开发大型PHP项目的方法
2006/10/09 PHP
让PHP更快的提供文件下载的代码
2012/06/13 PHP
php实现分页显示
2015/11/03 PHP
PHP常见漏洞攻击分析
2016/02/21 PHP
javascript中的对象和数组的应用技巧
2007/01/07 Javascript
jQuery-Tools-overlay 使用介绍
2012/07/14 Javascript
关于js注册事件的常用方法
2013/04/03 Javascript
js判断undefined变量类型使用typeof
2013/06/03 Javascript
require.js深入了解 require.js特性介绍
2014/09/04 Javascript
javascript省市区三级联动下拉框菜单实例演示
2015/11/29 Javascript
纯js实现瀑布流布局及ajax动态新增数据
2016/04/07 Javascript
BootStrap实现鼠标悬停下拉列表功能
2017/02/17 Javascript
elementUI Vue 单个按钮显示和隐藏的变换功能(两种方法)
2018/09/04 Javascript
vue中父子组件传值,解决钩子函数mounted只运行一次的操作
2020/07/27 Javascript
JavaScript实现与web通信的方法详解
2020/08/07 Javascript
用python3 返回鼠标位置的实现方法(带界面)
2019/07/05 Python
python爬虫项目设置一个中断重连的程序的实现
2019/07/26 Python
django+tornado实现实时查看远程日志的方法
2019/08/12 Python
Python3直接爬取图片URL并保存示例
2019/12/18 Python
Python importlib模块重载使用方法详解
2020/10/13 Python
Django web自定义通用权限控制实现方法
2020/11/24 Python
在Ubuntu中安装并配置Pycharm教程的实现方法
2021/01/06 Python
Python解析m3u8拼接下载mp4视频文件的示例代码
2021/03/03 Python
水果花束:Fruit Bouquets
2017/12/20 全球购物
英国第一的购买便宜玩具和游戏的在线购物网站:Bargain Max
2018/01/24 全球购物
大学生毕业的自我鉴定
2013/11/13 职场文书
英语一分钟演讲稿
2014/04/29 职场文书
学生上课看漫画的检讨书
2014/09/26 职场文书
软件项目经理岗位职责
2015/04/01 职场文书
医院病假条怎么写
2015/08/17 职场文书
MySQL 数据丢失排查案例
2021/05/08 MySQL
Python3中PyQt5简单实现文件打开及保存
2021/06/10 Python
python scrapy简单模拟登录的代码分析
2021/07/21 Python
Windows下载并安装MySQL8.0.x 版本的完整教程
2022/04/10 MySQL
vue使用element-ui按需引入
2022/05/20 Vue.js