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实现下载网易云音乐的高清MV
Mar 16 Python
Python循环语句之break与continue的用法
Oct 14 Python
Python实现各种排序算法的代码示例总结
Dec 11 Python
python xml.etree.ElementTree遍历xml所有节点实例详解
Dec 04 Python
python Matplotlib画图之调整字体大小的示例
Nov 20 Python
使用pygame模块编写贪吃蛇的实例讲解
Feb 05 Python
解决pip install的时候报错timed out的问题
Jun 12 Python
解决pandas中读取中文名称的csv文件报错的问题
Jul 04 Python
使用python批量修改文件名的方法(视频合并时)
Mar 24 Python
Python 实现自动登录+点击+滑动验证功能
Jun 10 Python
Python Django路径配置实现过程解析
Nov 05 Python
Python 类,对象,数据分类,函数参数传递详解
Sep 25 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
PHP读取MySQL数据代码
2008/06/05 PHP
PHP的加密方式及原理
2012/06/14 PHP
PHP中构造函数和析构函数解析
2014/10/10 PHP
php限制上传文件类型并保存上传文件的方法
2015/03/13 PHP
Yii 框架控制器创建使用及控制器响应操作示例
2019/10/14 PHP
javascript 写类方式之六
2009/07/05 Javascript
jQuery.ajax 用户登录验证代码
2010/10/29 Javascript
很棒的学习jQuery的12个网站推荐
2011/04/28 Javascript
Jquery 复选框取值兼容FF和IE8(测试有效)
2013/10/29 Javascript
jQuery的cookie插件实现保存用户登陆信息
2014/04/15 Javascript
封装好的一个万能检测表单的方法
2015/01/21 Javascript
JS动态改变表格边框宽度的方法
2015/03/31 Javascript
Bootstrap每天必学之js插件
2015/11/30 Javascript
js多个物体运动功能实例分析
2016/12/20 Javascript
angularjs的select使用及默认选中设置
2017/04/08 Javascript
JS获取鼠标位置距浏览器窗口距离的方法示例
2017/04/11 Javascript
利用prop-types第三方库对组件的props中的变量进行类型检测
2017/05/02 Javascript
vue 2.0路由之路由嵌套示例详解
2017/05/08 Javascript
JS获取url参数,JS发送json格式的POST请求方法
2018/03/29 Javascript
详解vue-router的Import异步加载模块问题的解决方案
2020/05/13 Javascript
微信小程序连接服务器展示MQTT数据信息的实现
2020/07/14 Javascript
Python高级应用实例对比:高效计算大文件中的最长行的长度
2014/06/08 Python
在Python的一段程序中如何使用多次事件循环详解
2017/09/07 Python
Windows下的Python 3.6.1的下载与安装图文详解(适合32位和64位)
2018/02/21 Python
详解Python3 pickle模块用法
2019/09/16 Python
python如何求100以内的素数
2020/05/27 Python
python中entry用法讲解
2020/12/04 Python
巴西婴儿用品商店:Bebe Store
2017/11/23 全球购物
当文件系统受到破坏时,如何检查和修复系统?
2012/03/09 面试题
关于逃课的检讨书
2014/01/23 职场文书
《跨越百年的美丽》教学反思
2014/02/11 职场文书
改革共识倡议书
2014/08/29 职场文书
2014年高二班主任工作总结
2014/12/16 职场文书
2015年教师节主持词
2015/07/03 职场文书
SSM项目使用拦截器实现登录验证功能
2022/01/22 Java/Android
hive数据仓库新增字段方法
2022/06/25 数据库