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 中的with关键字使用详解
Sep 11 Python
python 队列详解及实例代码
Oct 18 Python
50行Python代码实现人脸检测功能
Jan 23 Python
详解TensorFlow查看ckpt中变量的几种方法
Jun 19 Python
pytorch中如何使用DataLoader对数据集进行批处理的方法
Aug 06 Python
python自动化unittest yaml使用过程解析
Feb 03 Python
Ubuntu18.04安装 PyCharm并使用 Anaconda 管理的Python环境
Apr 08 Python
Python闭包及装饰器运行原理解析
Jun 17 Python
python对批量WAV音频进行等长分割的方法实现
Sep 25 Python
python利用platform模块获取系统信息
Oct 09 Python
学点简单的Django之第一个Django程序的实现
Feb 24 Python
python游戏开发之pygame实现接球小游戏
Apr 22 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
15个小时----从修改程序到自己些程序
2006/10/09 PHP
基于数据库的在线人数,日访问量等统计
2006/10/09 PHP
Laravel 4 初级教程之安装及入门
2014/10/30 PHP
PHP自定session保存路径及删除、注销与写入的方法
2014/11/18 PHP
php curl登陆qq后获取用户信息时证书错误
2015/02/03 PHP
JS代码格式化和语法着色V2
2006/10/14 Javascript
爆炸式的JS圆形浮动菜单特效代码
2010/03/03 Javascript
你必须知道的JavaScript 变量命名规则详解
2013/05/07 Javascript
javascript获取flash版本号的方法
2014/11/20 Javascript
JS实现表单多文件上传样式美化支持选中文件后删除相关项
2016/09/30 Javascript
Vue.JS入门教程之处理表单
2016/12/01 Javascript
基于JavaScript实现滑动门效果
2017/03/16 Javascript
js实现跟随鼠标移动的小球
2019/08/26 Javascript
Vue中父子组件的值传递与方法传递
2020/09/28 Javascript
原生js+canvas实现验证码
2020/11/29 Javascript
使用Mixin设计模式进行Python编程的方法讲解
2016/06/21 Python
Python爬虫使用脚本登录Github并查看信息
2018/07/16 Python
python3 cvs将数据读取为字典的方法
2018/12/22 Python
用python一行代码得到数组中某个元素的个数方法
2019/01/28 Python
Python学习笔记之变量、自定义函数用法示例
2019/05/28 Python
pandas 选取行和列数据的方法详解
2019/08/08 Python
python自动化UI工具发送QQ消息的实例
2019/08/27 Python
Python  word实现读取及导出代码解析
2020/07/09 Python
python利用pytesseract 实现本地识别图片文字
2020/12/14 Python
CSS3中设置3D变形的transform-style属性详解
2016/05/23 HTML / CSS
HTML5的结构和语义(1):前言
2008/10/17 HTML / CSS
Deux par Deux官方网站:设计师童装
2020/01/03 全球购物
别名指示符是什么
2012/10/08 面试题
医学专业职业生涯规划范文
2014/02/05 职场文书
班级文化标语
2014/06/23 职场文书
快递员岗位职责
2014/09/12 职场文书
个人批评与自我批评材料
2014/10/17 职场文书
师德承诺书2015
2015/04/28 职场文书
怎样写观后感
2015/06/19 职场文书
创业分两种人:那么哪些适合创业?,哪些适合不适合创业呢?
2019/08/23 职场文书
Vue3如何理解ref toRef和toRefs的区别
2022/02/18 Vue.js