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实现的AES双向对称加密解密与用法分析
May 02 Python
特征脸(Eigenface)理论基础之PCA主成分分析法
Mar 13 Python
Python使用cx_Oracle模块操作Oracle数据库详解
May 07 Python
使用Python监视指定目录下文件变更的方法
Oct 15 Python
pyqt5 comboBox获得下标、文本和事件选中函数的方法
Jun 14 Python
详解Matplotlib绘图之属性设置
Aug 23 Python
Python3如何对urllib和urllib2进行重构
Nov 25 Python
基于Python执行dos命令并获取输出的结果
Dec 30 Python
Python实现ATM系统
Feb 17 Python
Python正则表达式学习小例子
Mar 03 Python
Python logging模块异步线程写日志实现过程解析
Jun 30 Python
python中用ctypes模拟点击的实例讲解
Nov 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
增加反向链接的101个方法 站长推荐
2007/01/31 PHP
php中用date函数获取当前时间有误的解决办法
2013/08/02 PHP
PHP获取数组中重复最多的元素的实现方法
2014/11/11 PHP
解决php用mysql方式连接数据库出现Deprecated报错问题
2019/12/25 PHP
QQ邮箱的一个文本编辑器代码
2007/03/14 Javascript
纯JS实现五子棋游戏兼容各浏览器(附源码)
2013/04/24 Javascript
js操作table示例(个人心得)
2013/11/29 Javascript
PHPExcel中的一些常用方法汇总
2015/01/23 Javascript
浅谈javascript中的instanceof和typeof
2015/02/27 Javascript
JavaScript获取网页中第一个链接ID的方法
2015/04/03 Javascript
QQ登录背景闪动效果附效果演示源码下载
2015/09/22 Javascript
使用jQuery加载html页面到指定的div实现方法
2016/07/13 Javascript
JS实现获取当前URL和来源URL的方法
2016/08/24 Javascript
12 款 JS 代码测试必备工具(翻译)
2016/12/13 Javascript
JQuery ZTree使用方法详解
2017/01/07 Javascript
几种tab切换详解
2017/02/03 Javascript
使用Vue写一个datepicker的示例
2018/01/27 Javascript
python标准日志模块logging的使用方法
2013/11/01 Python
解析Python中的生成器及其与迭代器的差异
2016/06/20 Python
Python数据可视化正态分布简单分析及实现代码
2017/12/04 Python
微信跳一跳小游戏python脚本
2018/01/05 Python
python PyTorch预训练示例
2018/02/11 Python
python绘制漏斗图步骤详解
2019/03/04 Python
python反编译学习之字节码详解
2019/05/19 Python
python 使用pygame工具包实现贪吃蛇游戏(多彩版)
2019/10/30 Python
Python Tornado之跨域请求与Options请求方式
2020/03/28 Python
CSS3的column-fill属性对齐列内容高度的用法详解
2016/07/01 HTML / CSS
CSS3实现红包抖动效果
2020/12/23 HTML / CSS
如何在网站上添加谷歌定位信息
2016/04/16 HTML / CSS
《忆江南》教学反思
2014/04/07 职场文书
六一儿童节演讲稿
2014/05/23 职场文书
红色旅游心得体会
2014/09/03 职场文书
2016廉洁从政心得体会
2016/01/19 职场文书
适合毕业生创业的项目怎么找?
2019/08/08 职场文书
企业内部管理控制:银行存款控制制度范本
2020/01/10 职场文书
正确使用MySQL update语句
2021/05/26 MySQL