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实现可将字符转换成大写的tcp服务器实例
Apr 29 Python
Python简单计算文件夹大小的方法
Jul 14 Python
windows下python连接oracle数据库
Jun 07 Python
解决pandas无法在pycharm中使用plot()方法显示图像的问题
May 24 Python
python2.7实现爬虫网页数据
May 25 Python
Python2.7.10以上pip更新及其他包的安装教程
Jun 12 Python
使用pandas把某一列的字符值转换为数字的实例
Jan 29 Python
详解Python Matplot中文显示完美解决方案
Mar 07 Python
基于plt.title无法显示中文的快速解决
May 16 Python
基于python实现判断字符串是否数字算法
Jul 10 Python
python中使用np.delete()的实例方法
Feb 01 Python
matplotlib bar()实现百分比堆积柱状图
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内核解析:PHP中的哈希表
2014/01/30 PHP
wamp安装后自定义配置的方法
2014/08/23 PHP
js拦截alert对话框另类应用
2013/01/16 Javascript
JQuery加载图片自适应固定大小的DIV
2013/09/12 Javascript
JS中window.open全屏命令解析及使用示例
2013/12/11 Javascript
js遍历子节点子元素附属性及方法
2014/08/19 Javascript
jquery实现页面虚拟键盘特效
2015/08/08 Javascript
jquery实现网站列表切换效果的2种方法
2016/08/12 Javascript
jQuery插件autocomplete使用详解
2017/02/04 Javascript
Vue声明式渲染详解
2017/05/17 Javascript
swiper 自动图片无限轮播实现代码
2018/05/21 Javascript
Vue-cli3项目配置Vue.config.js实战记录
2018/07/29 Javascript
微信公众号平台接口开发 菜单管理的实现
2019/08/14 Javascript
layui内置模块layim发送图片添加加载动画的方法
2019/09/23 Javascript
Angular6项目打包优化的实现方法
2019/12/15 Javascript
小程序跳转H5页面的方法步骤
2020/03/06 Javascript
JavaScript Event Loop相关原理解析
2020/06/10 Javascript
简单的编程0基础下Python入门指引
2015/04/01 Python
python九九乘法表的实例
2017/09/26 Python
利用Python查看微信共同好友功能的实现代码
2019/04/24 Python
在Python中构建增广矩阵的实现方法
2019/07/01 Python
pytorch sampler对数据进行采样的实现
2019/12/31 Python
python GUI库图形界面开发之PyQt5滚动条控件QScrollBar详细使用方法与实例
2020/03/06 Python
Python实现汇率转换操作
2020/05/03 Python
python中pickle模块浅析
2020/12/29 Python
Mankind美国/加拿大:英国领先的男士美容护发用品公司
2018/12/05 全球购物
英国排名第一的停车场运营商:NCP
2019/08/26 全球购物
函授本科自我鉴定
2014/02/04 职场文书
财务人员求职自荐书范文
2014/02/10 职场文书
学习决心书范文
2014/03/11 职场文书
年终总结会议主持词
2014/03/17 职场文书
工程合作意向书范本
2015/05/09 职场文书
工作犯错保证书
2015/05/11 职场文书
政工师工作总结2015
2015/05/26 职场文书
聘任合同书
2015/09/21 职场文书
Django项目配置Memcached和Redis, 缓存选择哪个更有优势
2021/04/06 Python