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中的一些陷阱与技巧小结
Jul 10 Python
Windows下python2.7.8安装图文教程
May 26 Python
django2用iframe标签完成网页内嵌播放b站视频功能
Jun 20 Python
python 文件转成16进制数组的实例
Jul 09 Python
python 常用的基础函数
Jul 10 Python
解决Python pandas plot输出图形中显示中文乱码问题
Dec 12 Python
python3实现多线程聊天室
Dec 12 Python
numpy.where() 用法详解
May 27 Python
python实现低通滤波器代码
Feb 26 Python
如何学习Python time模块
Jun 03 Python
Jupyter安装拓展nbextensions及解决官网下载慢的问题
Mar 03 Python
字典算法实现及操作 --python(实用)
Mar 31 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
jsonp原理及使用
2013/10/28 Javascript
AJAX跨域请求json数据的实现方法
2013/11/11 Javascript
JS调试必备的5个debug技巧
2014/03/07 Javascript
解决html按钮切换绑定不同函数后点击时执行多次函数问题
2014/05/14 Javascript
javascript实现复制与粘贴操作实例
2014/10/16 Javascript
JS弹出层遮罩,隐藏背景页面滚动条细节优化分析
2016/04/29 Javascript
js获取新浪天气接口的实现代码
2016/06/06 Javascript
关于jQuery.ajax()的jsonp碰上post详解
2017/07/02 jQuery
浅谈react受控组件与非受控组件(小结)
2018/02/09 Javascript
关于vue面试题汇总
2018/03/20 Javascript
解决vue-cli webpack打包后加载资源的路径问题
2018/09/25 Javascript
electron实现qq快捷登录的方法示例
2018/10/22 Javascript
详解vue-cli3 中跨域解决方案
2019/04/10 Javascript
微信小程序 如何保持登录状态
2019/08/16 Javascript
JavaScript实现飞舞的泡泡效果
2020/02/07 Javascript
[14:36]2014 DOTA2国际邀请赛中国区预选赛5.21 Orenda VS NE
2014/05/22 DOTA
[01:00:14]DOTA2-DPC中国联赛 正赛 Ehome vs Elephant BO3 第二场 2月28日
2021/03/11 DOTA
Python程序中用csv模块来操作csv文件的基本使用教程
2016/03/03 Python
Python生成随机数组的方法小结
2017/04/15 Python
Python线程池模块ThreadPoolExecutor用法分析
2018/12/28 Python
关于Pycharm无法debug问题的总结
2019/01/19 Python
python判断单向链表是否包括环,若包含则计算环入口的节点实例分析
2019/10/23 Python
python GUI库图形界面开发之PyQt5 MDI(多文档窗口)QMidArea详细使用方法与实例
2020/03/05 Python
VScode连接远程服务器上的jupyter notebook的实现
2020/04/23 Python
多视角3D逼真HTML5水波动画
2016/03/03 HTML / CSS
Speedo美国:澳大利亚顶尖泳衣制造商
2016/08/03 全球购物
缅甸网上购物:Shop.com.mm
2017/12/05 全球购物
俄罗斯在线手表和珠宝商店:AllTime
2019/09/28 全球购物
中科前程Java笔试题
2016/11/20 面试题
小学数学教学经验交流材料
2014/05/22 职场文书
保护地球的标语
2014/06/17 职场文书
2015年社区文体活动总结
2015/03/25 职场文书
课文《燕子》教学反思
2016/02/17 职场文书
原来实习报告是这样写的呀!
2019/07/03 职场文书
Nginx+Tomcat实现负载均衡、动静分离的原理解析
2021/03/31 Servers
Java获取字符串编码格式实现思路
2022/09/23 Java/Android