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完全新手教程
Feb 08 Python
python删除过期文件的方法
May 29 Python
使用python PIL库实现简单验证码的去噪方法步骤
May 10 Python
numpy数组之存取文件的实现示例
May 24 Python
分析运行中的 Python 进程详细解析
Jun 22 Python
Django的用户模块与权限系统的示例代码
Jul 24 Python
Python学习笔记之文件的读写操作实例分析
Aug 07 Python
Kears+Opencv实现简单人脸识别
Aug 28 Python
解决pycharm上的jupyter notebook端口被占用问题
Dec 17 Python
python列表切片和嵌套列表取值操作详解
Feb 27 Python
django中url映射规则和服务端响应顺序的实现
Apr 02 Python
python文本处理的方案(结巴分词并去除符号)
May 26 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脚本过滤用户上传的图片
2015/07/03 PHP
php mysql procedure实现获取多个结果集的方法【基于thinkPHP】
2016/11/09 PHP
PHP实现将多个文件中的内容合并为新文件的方法示例
2017/06/10 PHP
PHP7中I/O模型内核剖析详解
2019/04/14 PHP
JS类中定义原型方法的两种实现的区别
2007/03/08 Javascript
Jquery 快速构建可拖曳的购物车DragDrop
2009/11/30 Javascript
javascript 通用简单的table选项卡实现
2010/05/07 Javascript
javascript中使用replaceAll()函数实现字符替换的方法
2010/12/25 Javascript
幻灯片带网页设计中的20个奇妙应用示例小结
2012/05/27 Javascript
Javascript浅谈之this
2013/12/17 Javascript
ie8模式下click无反应点击option无反应的解决方法
2014/10/11 Javascript
jquery文档操作wrap()方法实例简述
2015/01/10 Javascript
js实现带按钮的上下滚动效果
2015/05/12 Javascript
jQuery获取页面及个元素高度、宽度的总结——超实用
2015/07/28 Javascript
程序员必知35个jQuery 代码片段
2015/11/05 Javascript
AngularJS中实现动画效果的方法
2016/07/28 Javascript
Node.js开启Https的实践详解
2016/10/25 Javascript
Nodejs进阶:核心模块net入门学习与实例讲解
2016/11/21 NodeJs
浅析js的模块化编写 require.js
2016/12/07 Javascript
JS前端笔试题分析
2016/12/19 Javascript
vue v-on监听事件详解
2017/05/17 Javascript
浅析Node.js非对称加密方法
2018/01/29 Javascript
vue.js 实现图片本地预览 裁剪 压缩 上传功能
2018/03/01 Javascript
nodeJS服务器的创建和重新启动的实现方法
2018/05/12 NodeJs
vue实现弹框遮罩点击其他区域弹框关闭及v-if与v-show的区别介绍
2018/09/29 Javascript
element-ui 的el-button组件中添加自定义颜色和图标的实现方法
2018/10/26 Javascript
npx create-react-app xxx创建项目报错的解决办法
2020/02/17 Javascript
微信小程序开发(一):服务器获取数据列表渲染操作示例
2020/06/01 Javascript
python多线程编程中的join函数使用心得
2014/09/02 Python
django实现前后台交互实例
2017/08/07 Python
Python 中的range(),以及列表切片方法
2018/07/02 Python
初中物理教学反思
2014/01/14 职场文书
网络信息安全承诺书
2014/03/26 职场文书
邻里守望志愿服务活动方案
2014/08/15 职场文书
2014年小学国庆节活动方案
2014/09/16 职场文书
养成教育主题班会
2015/08/13 职场文书