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实现在无须过多援引的情况下创建字典的方法
Sep 25 Python
Python基于回溯法子集树模板解决找零问题示例
Sep 11 Python
Python3实战之爬虫抓取网易云音乐的热门评论
Oct 09 Python
python向已存在的excel中新增表,不覆盖原数据的实例
May 02 Python
opencv python 2D直方图的示例代码
Jul 20 Python
Python SQL查询并生成json文件操作示例
Aug 17 Python
django解决跨域请求的问题
Nov 11 Python
python实现中文文本分句的例子
Jul 15 Python
python自动化UI工具发送QQ消息的实例
Aug 27 Python
Python+appium框架原生代码实现App自动化测试详解
Mar 06 Python
Python 通过正则表达式快速获取电影的下载地址
Aug 17 Python
Python 阶乘详解
Oct 05 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
一个查看session内容的函数
2006/10/09 PHP
PHP 字符串操作入门教程
2006/12/06 PHP
Jquery Ajax方法传值到action的方法
2014/05/11 Javascript
详谈JavaScript 匿名函数及闭包
2014/11/14 Javascript
常用的JavaScript模板引擎介绍
2015/02/28 Javascript
vue获取input输入值的问题解决办法
2017/10/17 Javascript
JointJS流程图的绘制方法
2018/12/03 Javascript
vue 地图可视化 maptalks 篇实例代码详解
2019/05/21 Javascript
jQuery位置选择器用法实例分析
2019/06/28 jQuery
详解element-ui中表单验证的三种方式
2019/09/18 Javascript
jQuery实现鼠标放置名字上显示详细内容气泡提示框效果的方法分析
2020/04/04 jQuery
从0到1学习JavaScript编写贪吃蛇游戏
2020/07/28 Javascript
详解Vue.js3.0 组件是如何渲染为DOM的
2020/11/10 Javascript
vue3.0自定义指令(drectives)知识点总结
2020/12/27 Vue.js
Python多进程编程技术实例分析
2014/09/16 Python
Python 文件管理实例详解
2015/11/10 Python
Python聚类算法之凝聚层次聚类实例分析
2015/11/20 Python
Python中多线程的创建及基本调用方法
2016/07/08 Python
python实现k-means聚类算法
2018/02/23 Python
python: line=f.readlines()消除line中\n的方法
2018/03/19 Python
PyCharm 设置SciView工具窗口的方法
2019/01/15 Python
谈谈Python中的while循环语句
2019/03/10 Python
浅谈python图片处理Image和skimage的区别
2019/08/04 Python
详解CSS3中常用的样式【基本文本和字体样式】
2020/10/20 HTML / CSS
浅谈html5增强的页面元素
2016/06/14 HTML / CSS
中邮全球便购:中国邮政速递物流
2017/03/04 全球购物
西班牙宠物用品和食品网上商店:Tiendanimal
2019/06/06 全球购物
经典c++面试题四
2015/05/14 面试题
MYSQL基础面试题
2012/05/13 面试题
硕士研究生个人求职信
2013/12/04 职场文书
茶楼服务员岗位职责
2015/02/09 职场文书
班主任高考寄语
2015/02/26 职场文书
企业廉洁教育心得体会
2016/01/20 职场文书
《活见鬼》教学反思
2016/02/24 职场文书
一篇文章弄懂MySQL查询语句的执行过程
2021/05/07 MySQL
如何设置多台电脑共享打印机?多台电脑共享打印机的方法
2022/04/08 数码科技