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之总结参数的传递
Oct 10 Python
在Django框架中运行Python应用全攻略
Jul 17 Python
Python获取当前路径实现代码
May 08 Python
Linux RedHat下安装Python2.7开发环境
May 20 Python
Python基于Floyd算法求解最短路径距离问题实例详解
May 16 Python
python制作抖音代码舞
Apr 07 Python
python3中rank函数的用法
Nov 27 Python
学生如何注册Pycharm专业版以及pycharm的安装
Sep 24 Python
python自动化测试三部曲之unittest框架的实现
Oct 07 Python
python Autopep8实现按PEP8风格自动排版Python代码
Mar 02 Python
python中的None与NULL用法说明
May 25 Python
OpenCV-Python实现人脸美白算法的实例
Jun 11 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
DC这些乐高系列动画电影你看过几部?
2020/04/09 欧美动漫
分页显示Oracle数据库记录的类之二
2006/10/09 PHP
Smarty结合Ajax实现无刷新留言本实例
2007/01/02 PHP
推荐一篇入门级的Class文章
2007/03/19 PHP
php socket方式提交的post详解
2008/07/19 PHP
PHP计数器的实现代码
2013/06/08 PHP
thinkPHP下ueditor的使用方法详解
2015/12/26 PHP
JavaScript 动态创建VML的方法
2009/10/14 Javascript
Node.js中文件操作模块File System的详细介绍
2017/01/05 Javascript
vue快捷键与基础指令详解
2017/06/01 Javascript
JavaScript队列函数和异步执行详解
2017/06/19 Javascript
AngularJS与后端php的数据交互方法
2018/08/13 Javascript
详解vue更改头像功能实现
2019/04/28 Javascript
[57:24]LGD vs VGJ.T 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
MySQL适配器PyMySQL详解
2017/09/20 Python
matplotlib subplots 设置总图的标题方法
2018/05/25 Python
利用Python+阿里云实现DDNS动态域名解析的方法
2019/04/01 Python
python实现两个dict合并与计算操作示例
2019/07/01 Python
python matplotlib 画dataframe的时间序列图实例
2019/11/20 Python
3种python调用其他脚本的方法
2020/01/06 Python
解决paramiko执行命令超时的问题
2020/04/16 Python
美国优质宠物用品购买网站:Muttropolis
2020/02/17 全球购物
Moda Operandi官网:美国奢侈品电商,海淘秀场T台同款
2020/05/26 全球购物
大学生职业生涯规划范文
2013/12/31 职场文书
家长给孩子的评语
2014/01/30 职场文书
安全标准化汇报材料
2014/02/03 职场文书
参观接待方案
2014/03/17 职场文书
党员干部公开承诺书
2014/03/26 职场文书
暖通工程师岗位职责
2014/06/12 职场文书
多媒体教室标语
2014/06/26 职场文书
学生安全责任书模板
2014/07/25 职场文书
保险公司演讲稿
2014/09/02 职场文书
股东出资证明书(正规版)
2014/09/24 职场文书
承诺书范本大全
2015/05/04 职场文书
小学班级标语口号大全
2015/12/26 职场文书
如何把新闻人物写得立体、鲜活?
2019/08/14 职场文书