python+mongodb数据抓取详细介绍


Posted in Python onOctober 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+mongodb数据抓取详细介绍的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站:Python探索之创建二叉树、Python探索之修改Python搜索路径、浅谈python中copy和deepcopy中的区别等,有什么问题,欢迎留言一起交流讨论。

Python 相关文章推荐
python笔记(1) 关于我们应不应该继续学习python
Oct 24 Python
Python随机生成一个6位的验证码代码分享
Mar 24 Python
Python入门_浅谈数据结构的4种基本类型
May 16 Python
Python竟能画这么漂亮的花,帅呆了(代码分享)
Nov 15 Python
Python列表推导式、字典推导式与集合推导式用法实例分析
Feb 07 Python
Django框架创建mysql连接与使用示例
Jul 29 Python
python实现本地批量ping多个IP的方法示例
Aug 07 Python
python 申请内存空间,用于创建多维数组的实例
Dec 02 Python
Python定时器线程池原理详解
Feb 26 Python
Python API len函数操作过程解析
Mar 05 Python
Python爬虫爬取新闻资讯案例详解
Jul 14 Python
浅析Python 序列化与反序列化
Aug 05 Python
python装饰器实例大详解
Oct 25 #Python
Python3 模块、包调用&amp;路径详解
Oct 25 #Python
Python探索之创建二叉树
Oct 25 #Python
Python探索之修改Python搜索路径
Oct 25 #Python
python中 logging的使用详解
Oct 25 #Python
python下载文件记录黑名单的实现代码
Oct 24 #Python
基于python中staticmethod和classmethod的区别(详解)
Oct 24 #Python
You might like
基于文本的搜索
2006/10/09 PHP
php压缩多个CSS为一个css的代码并缓存
2011/04/21 PHP
php urlencode()与urldecode()函数字符编码原理详解
2011/12/06 PHP
php使HTML标签自动补全闭合函数代码
2012/10/04 PHP
php实现判断访问来路是否为搜索引擎机器人的方法
2015/04/15 PHP
PHP实现数组转JSon和JSon转数组的方法示例
2018/06/14 PHP
javascript hashtable 修正版 下载
2010/12/30 Javascript
JS获取浏览器版本及名称实现函数
2013/04/02 Javascript
js 判断控件获得焦点的示例代码
2014/03/04 Javascript
浅谈JavaScript的事件
2015/02/27 Javascript
JavaScript设置获取和设置属性的方法
2015/03/04 Javascript
JavaScript+CSS无限极分类效果完整实现方法
2015/12/22 Javascript
微信小程序之网络请求简单封装实例详解
2017/06/28 Javascript
vue实现登陆登出的实现示例
2017/09/15 Javascript
微信小程序实现获取自己所处位置的经纬度坐标功能示例
2017/11/30 Javascript
微信小程序视图容器(swiper)组件创建轮播图
2020/06/19 Javascript
Vue实现简单分页器
2018/12/29 Javascript
[47:21]Liquid vs TNC Supermajor 胜者组 BO3 第一场 6.4
2018/06/05 DOTA
[01:04:14]OG vs Winstrike 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
[52:03]DOTA2-DPC中国联赛 正赛 Ehome vs iG BO3 第三场 1月31日
2021/03/11 DOTA
Python素数检测的方法
2015/05/11 Python
Python中subprocess的简单使用示例
2015/07/28 Python
详解C++编程中一元运算符的重载
2016/01/19 Python
python正则中最短匹配实现代码
2018/01/16 Python
python提取图像的名字*.jpg到txt文本的方法
2018/05/10 Python
Windows下python3.6.4安装教程
2018/07/31 Python
python排序函数sort()与sorted()的区别
2018/09/18 Python
python实现微信防撤回神器
2019/04/29 Python
Python高级特性 切片 迭代解析
2019/08/23 Python
关于Numpy数据类型对象(dtype)使用详解
2019/11/27 Python
美国复古街头服饰精品店:Need Supply Co.
2017/02/22 全球购物
全球领先的中国制造商品在线批发平台:DHgate
2020/01/28 全球购物
写一个在SQL Server创建表的SQL语句
2012/03/10 面试题
node中使用shell脚本的方法步骤
2021/03/23 Javascript
《月光启蒙》教学反思
2014/03/01 职场文书
安全责任书
2015/01/29 职场文书