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 相关文章推荐
在树莓派2或树莓派B+上安装Python和OpenCV的教程
Mar 30 Python
使用Python发送邮件附件以定时备份MySQL的教程
Apr 25 Python
使用Python的PIL模块来进行图片对比
Feb 18 Python
Java多线程编程中ThreadLocal类的用法及深入
Jun 21 Python
Python文件的读写和异常代码示例
Oct 31 Python
Python lambda表达式用法实例分析
Dec 25 Python
Python中常用的8种字符串操作方法
May 06 Python
Python定时任务APScheduler的实例实例详解
Jul 22 Python
解决Python3用PIL的ImageFont输出中文乱码的问题
Aug 22 Python
windows环境中利用celery实现简单任务队列过程解析
Nov 29 Python
python3读取文件指定行的三种方法
May 24 Python
Python可视化学习之matplotlib内置单颜色
Feb 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获取远程图片并下载保存到本地的方法分析
2016/10/08 PHP
使用PHP+MySql+Ajax+jQuery实现省市区三级联动功能示例
2017/09/15 PHP
javascript编程起步(第六课)
2007/01/10 Javascript
javascript 选择文件夹对话框(web)
2009/07/07 Javascript
ajax的hide隐藏问题解决方法
2012/12/11 Javascript
jquery操作对象数组元素方法详解
2014/11/26 Javascript
js/jquery判断浏览器类型的方法小结
2015/05/12 Javascript
javascript+HTML5的canvas实现七夕情人节3D玫瑰花效果代码
2015/08/04 Javascript
让你一句话理解闭包(简单易懂)
2016/06/03 Javascript
Javascript之Number对象介绍
2016/06/07 Javascript
把多个JavaScript函数绑定到onload事件处理函数上的方法
2016/09/04 Javascript
js实现日历与定时器
2017/02/22 Javascript
JavaScript数据结构中串的表示与应用实例
2017/04/12 Javascript
微信小程序非swiper组件实现的自定义伪3D轮播图效果示例
2018/12/11 Javascript
在Vue中使用icon 字体图标的方法
2019/06/14 Javascript
JS数组进阶示例【数组的几种函数用法】
2020/01/16 Javascript
js 函数性能比较方法
2020/08/24 Javascript
django中静态文件配置static的方法
2018/05/20 Python
对Python多线程读写文件加锁的实例详解
2019/01/14 Python
Python零基础入门学习之输入与输出
2019/04/03 Python
解决pytorch GPU 计算过程中出现内存耗尽的问题
2019/08/19 Python
Python抓包程序mitmproxy安装和使用过程图解
2020/03/02 Python
解决matplotlib.pyplot在Jupyter notebook中不显示图像问题
2020/04/22 Python
Python+PyQt5实现灭霸响指功能
2020/05/25 Python
python 实现的车牌识别项目
2021/01/25 Python
python解包概念及实例
2021/02/17 Python
努比亚手机官网:nubia
2016/10/06 全球购物
联想中国官方商城:Lenovo China
2017/10/18 全球购物
少先队学雷锋活动总结范文
2014/03/09 职场文书
诚信考试承诺书
2014/03/27 职场文书
小学毕业典礼演讲稿
2014/09/09 职场文书
房租涨价通知
2015/04/23 职场文书
2015民办小学年度工作总结
2015/05/26 职场文书
python工具dtreeviz决策树可视化和模型可解释性
2022/03/03 Python
MySQL聚簇索引和非聚簇索引的区别详情
2022/06/14 MySQL
CSS中calc(100%-100px)不加空格不生效
2023/05/07 HTML / CSS