python数据抓取分析的示例代码(python + mongodb)


Posted in Python onDecember 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 相关文章推荐
二种python发送邮件实例讲解(python发邮件附件可以使用email模块实现)
Dec 03 Python
python发送邮件接收邮件示例分享
Jan 21 Python
python的三目运算符和not in运算符使用示例
Mar 03 Python
利用Python开发实现简单的记事本
Nov 15 Python
Python3爬虫学习之应对网站反爬虫机制的方法分析
Dec 12 Python
Python supervisor强大的进程管理工具的使用
Apr 24 Python
Python 使用list和tuple+条件判断详解
Jul 30 Python
Python Web框架之Django框架文件上传功能详解
Aug 16 Python
Django admin 实现search_fields精确查询实例
Mar 30 Python
解决django的template中如果无法引用MEDIA_URL问题
Apr 07 Python
python Zmail模块简介与使用示例
Dec 19 Python
Matplotlib可视化之添加让统计图变得简单易懂的注释
Jun 11 Python
Python实现生成随机日期字符串的方法示例
Dec 25 #Python
浅谈Python NLP入门教程
Dec 25 #Python
Python图形绘制操作之正弦曲线实现方法分析
Dec 25 #Python
关于Django显示时间你应该知道的一些问题
Dec 25 #Python
今天 平安夜 Python 送你一顶圣诞帽 @微信官方
Dec 25 #Python
python回调函数中使用多线程的方法
Dec 25 #Python
python创建列表和向列表添加元素的实现方法
Dec 25 #Python
You might like
计算2000年01月01日起到指定日的天数
2006/10/09 PHP
领悟php接口中interface存在的意义
2013/06/27 PHP
详细解读PHP的Yii框架中登陆功能的实现
2015/08/21 PHP
使用php+swoole对client数据实时更新(一)
2016/01/07 PHP
js压缩工具 yuicompressor 使用教程
2010/03/31 Javascript
JS面向对象编程浅析
2011/08/28 Javascript
JS中 用户登录系统的解决办法
2013/04/15 Javascript
JavaScript中按位“异或”运算符使用介绍
2014/03/14 Javascript
从零学JSON之JSON数据结构
2014/05/19 Javascript
jQuery.deferred对象使用详解
2016/03/18 Javascript
设计模式中的组合模式在JavaScript程序构建中的使用
2016/05/18 Javascript
jQuery实现页面滚动时智能浮动定位
2017/01/08 Javascript
理解javascript中的Function.prototype.bind的方法
2017/02/03 Javascript
JS判断两个对象内容是否相等的方法示例
2017/04/10 Javascript
删除table表格行的实例讲解
2017/09/21 Javascript
JavaScript实现的超简单计算器功能示例
2017/12/23 Javascript
Angular 4.x+Ionic3踩坑之Ionic 3.x界面传值详解
2018/03/13 Javascript
使用koa-log4管理nodeJs日志笔记的使用方法
2018/11/30 NodeJs
通过Nodejs搭建网站简单实现注册登录流程
2019/06/14 NodeJs
详解基于原生JS验证表单组件xy-form
2019/08/20 Javascript
python3.X 抓取火车票信息【修正版】
2018/06/19 Python
对python借助百度云API对评论进行观点抽取的方法详解
2019/02/21 Python
python实现可逆简单的加密算法
2019/03/22 Python
Flask框架钩子函数功能与用法分析
2019/08/02 Python
python+opencv实现移动侦测(帧差法)
2020/03/20 Python
Pycharm Available Package无法显示/安装包的问题Error Loading Package List解决
2020/09/18 Python
python生成word合同的实例方法
2021/01/12 Python
Python中的面向接口编程示例详解
2021/01/17 Python
基于html和CSS3制作酷炫的导航栏
2015/09/23 HTML / CSS
AmazeUI 评论列表的实现示例
2020/08/13 HTML / CSS
德国高尔夫商店:Par71.de
2020/11/29 全球购物
财务专业大学生职业生涯规划范文
2013/12/30 职场文书
幼儿园清明节活动总结
2014/07/04 职场文书
辞职信标准格式
2015/02/27 职场文书
实习护士自荐信
2015/03/25 职场文书
CSS中float高度塌陷问题的四种解决方案
2022/04/18 HTML / CSS