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调用cmd命令行制作刷博器
Jan 13 Python
Python使用PDFMiner解析PDF代码实例
Mar 27 Python
关于Python中空格字符串处理的技巧总结
Aug 10 Python
Win8.1下安装Python3.6提示0x80240017错误的解决方法
Jul 31 Python
python之消除前缀重命名的方法
Oct 21 Python
详解pyenv下使用python matplotlib模块的问题解决
Nov 29 Python
python 读取竖线分隔符的文本方法
Dec 20 Python
用python生成与调用cntk模型代码演示方法
Aug 26 Python
python使用 __init__初始化操作简单示例
Sep 26 Python
Python 实现Image和Ndarray互相转换
Feb 19 Python
python数据库编程 Mysql实现通讯录
Mar 27 Python
Python3操作读写CSV文件使用包过程解析
Apr 10 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 输出json及显示json中的中文汉字详解及实例
2016/11/09 PHP
php 三元运算符实例详细介绍
2016/12/15 PHP
PHP 实现字符串翻转(包含中文汉字)的实现代码
2017/04/01 PHP
javascript 语法基础 想学习js的朋友可以看看
2009/12/16 Javascript
原始的js代码和jquery对比体会
2013/09/10 Javascript
开源的javascript项目Kissy介绍
2014/11/28 Javascript
JavaScript获取页面上被选中文字的方法技巧
2015/03/13 Javascript
JavaScript中数组的合并以及排序实现示例
2015/10/24 Javascript
node.js插件nodeclipse安装图文教程
2020/10/19 Javascript
js字符串引用的两种方式(必看)
2016/09/18 Javascript
JS实现类似51job上的地区选择效果示例
2016/11/17 Javascript
Vuejs仿网易云音乐实现听歌及搜索功能
2017/03/30 Javascript
js移动端事件基础及常用事件库详解
2017/08/15 Javascript
深入理解ES6的迭代器与生成器
2017/08/19 Javascript
基于vue+canvas的excel-like组件实例详解
2017/11/28 Javascript
[04:13]2018国际邀请赛典藏宝瓶Ⅱ饰品一览
2018/07/21 DOTA
py中的目录与文件判别代码
2008/07/16 Python
python编程实现希尔排序
2017/04/13 Python
python selenium自动上传有赞单号的操作方法
2018/07/05 Python
从DataFrame中提取出Series或DataFrame对象的方法
2018/11/10 Python
Python面向对象之类和实例用法分析
2019/06/08 Python
Django多数据库的实现过程详解
2019/08/01 Python
基于pandas中expand的作用详解
2019/12/17 Python
解决pycharm每次打开项目都需要配置解释器和安装库问题
2020/02/26 Python
python虚拟环境模块venv使用及示例
2020/03/04 Python
基于python实现把json数据转换成Excel表格
2020/05/07 Python
使用jquery实现HTML5响应式导航菜单教程
2014/04/02 HTML / CSS
英国最受欢迎的平价女士时装零售商:Roman Originals
2019/11/02 全球购物
成人毕业生自我鉴定
2013/10/18 职场文书
药学专业大学生个人的自我评价
2013/11/04 职场文书
六一亲子活动总结
2014/07/01 职场文书
淘宝好评语句大全
2014/12/31 职场文书
2015年班组工作总结
2015/04/20 职场文书
2015年统战工作总结
2015/05/19 职场文书
在Python 中将类对象序列化为JSON
2022/04/06 Python
MySQL的prepare使用以及遇到的bug
2022/05/11 MySQL