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的Twisted框架实现一个简单的服务器
Apr 16 Python
Python中list初始化方法示例
Sep 18 Python
Python读取properties配置文件操作示例
Mar 29 Python
python flask解析json数据不完整的解决方法
May 26 Python
python字典一键多值实例代码分享
Jun 14 Python
python 缺失值处理的方法(Imputation)
Jul 02 Python
python元组和字典的内建函数实例详解
Oct 22 Python
TensorFlow实现打印每一层的输出
Jan 21 Python
解决keras加入lambda层时shape的问题
Jun 11 Python
基于Python的接口自动化unittest测试框架和ddt数据驱动详解
Jan 27 Python
解决pycharm修改代码后第一次运行不生效的问题
Feb 06 Python
python 统计list中各个元素出现的次数的几种方法
Feb 20 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
咖啡因含量是由谁决定的?低因咖啡怎么来?低因咖啡适合什么人喝
2021/03/06 新手入门
php中获取指定IP的物理地址的代码(正则表达式)
2011/06/23 PHP
php计算数组不为空元素个数的方法
2014/01/27 PHP
php实现的漂亮分页方法
2014/04/17 PHP
THINKPHP内容分页代码分享
2015/01/14 PHP
实现PHP中session存储及删除变量
2018/10/15 PHP
php微信公众号开发之图片回复
2018/10/20 PHP
js实现运动logo图片效果及运动元素对象sportBox使用方法
2012/12/25 Javascript
基于jquery实现后台左侧菜单点击上下滑动显示
2013/04/11 Javascript
jquery、js调用iframe父窗口与子窗口元素的方法整理
2014/07/31 Javascript
JavaScript实现广告的关闭与显示效果实例
2015/07/02 Javascript
Javascript BOM学习小结(六)
2015/11/26 Javascript
Flow之一个新的Javascript静态类型检查器
2015/12/21 Javascript
JS如何设置cookie有效期为当天24点并弹出欢迎登陆界面
2016/08/04 Javascript
jquery 实时监听输入框值变化的完美方法(必看)
2017/01/26 Javascript
node.js-v6新版安装具体步骤(分享)
2017/09/06 Javascript
Angular 4.x+Ionic3踩坑之Ionic3.x pop反向传值详解
2018/03/13 Javascript
使用Vuex解决Vue中的身份验证问题
2018/09/28 Javascript
jQuery ajax仿Google自动提示SearchSuggess功能示例
2019/03/28 jQuery
利用原生JS实现欢乐水果机小游戏
2020/04/23 Javascript
JS 逻辑判断不要只知道用 if-else 和 switch条件判断(小技巧)
2020/05/27 Javascript
[01:02]DOTA2辉夜杯决赛日 CDEC.Y对阵VG赛前花絮
2015/12/27 DOTA
[03:05]《我与DAC》之xiao8:DAC与BG
2018/03/27 DOTA
python实现巡检系统(solaris)示例
2014/04/02 Python
PyCharm GUI界面开发和exe文件生成的实现
2020/03/04 Python
python爬虫可以爬什么
2020/06/16 Python
python绘制汉诺塔
2021/03/01 Python
HTML5 History API 实现无刷新跳转
2016/01/11 HTML / CSS
HealthElement海外旗舰店:新西兰大卖场
2018/02/23 全球购物
什么是GWT的Module
2013/01/20 面试题
安全生产月活动总结
2014/05/04 职场文书
高中学生会竞选演讲稿
2014/08/25 职场文书
标准单位租车协议书
2014/09/23 职场文书
总结一些Java常用的加密算法
2021/06/11 Java/Android
SpringBoot中HttpSessionListener的简单使用方式
2022/03/17 Java/Android
一次线上mongo慢查询问题排查处理记录
2022/03/18 MongoDB