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 相关文章推荐
Python3 能振兴 Python的原因分析
Nov 28 Python
用Python编写一个每天都在系统下新建一个文件夹的脚本
May 04 Python
python字典DICT类型合并详解
Aug 17 Python
python编程使用协程并发的优缺点
Sep 20 Python
Python爬虫之正则表达式的使用教程详解
Oct 25 Python
如何使用python操作vmware
Jul 27 Python
python序列类型种类详解
Feb 26 Python
Python中有几个关键字
Jun 04 Python
Python 程序员必须掌握的日志记录
Aug 17 Python
详解Python之Scrapy爬虫教程NBA球员数据存放到Mysql数据库
Jan 24 Python
使用Python下载抖音各大V视频的思路详解
Feb 06 Python
python 高阶函数简单介绍
Feb 19 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对gzip文件或者字符串解压实例参考
2008/07/25 PHP
php相当简单的分页类
2008/10/02 PHP
php 问卷调查结果统计
2015/10/08 PHP
网页开发中的容易忽略的问题 javascript HTML中的table
2009/04/15 Javascript
Javascript this指针
2009/07/30 Javascript
javascript 面向对象全新理练之数据的封装
2009/12/03 Javascript
一个javascript图片阅览组件
2010/11/09 Javascript
js输入框邮箱自动提示功能代码实现
2013/12/10 Javascript
js定时器的使用(实例讲解)
2014/01/06 Javascript
JavaScript中使用document.write向页面输出内容实例
2014/10/16 Javascript
详解javascript实现瀑布流绝对式布局
2016/01/29 Javascript
AngularJS控制器详解及示例代码
2016/08/16 Javascript
JSON与String互转的实现方法(Javascript)
2016/09/27 Javascript
微信小程序  modal详解及实例代码
2016/11/09 Javascript
webstorm和.vue中es6语法报错的解决方法
2018/05/08 Javascript
从零开始搭建vue移动端项目到上线的步骤
2018/10/15 Javascript
使用JavaScript计算前一天和后一天的思路详解
2019/12/20 Javascript
javascript实现fetch请求返回的统一拦截
2019/12/22 Javascript
JS 事件机制完整示例分析
2020/01/15 Javascript
Vue this.$router.push(参数)实现页面跳转操作
2020/09/09 Javascript
python机器学习实战之最近邻kNN分类器
2017/12/20 Python
python各类经纬度转换的实例代码
2019/08/08 Python
安装Anaconda3及使用Jupyter的方法
2020/10/27 Python
基于HTML5的WebGL经典3D虚拟机房漫游动画
2017/11/15 HTML / CSS
来自世界各地的优质葡萄酒:VineShop24
2018/07/09 全球购物
泰国Robinson百货官网:购买知名品牌的商品
2020/02/08 全球购物
美国知名眼镜网站:Target Optical
2020/04/04 全球购物
构造器Constructor是否可被override?
2013/08/06 面试题
网站美工岗位职责
2014/04/02 职场文书
勿忘国耻9.18演讲稿(经典篇)
2014/09/14 职场文书
机关作风整顿个人整改措施2014
2014/09/17 职场文书
中学生运动会通讯稿大全
2014/09/18 职场文书
关于群众路线的心得体会
2014/11/05 职场文书
五一劳动节活动总结
2015/02/09 职场文书
oracle DGMGRL ORA-16603报错的解决方法(DG Broker)
2021/04/06 Oracle
MySQL数据管理操作示例讲解
2022/12/24 MySQL