侯体宗的博客
  • 首页
  • 人生(杂谈)
  • 技术
  • 关于我
  • 更多分类
    • 文件下载
    • 文字修仙
    • 中国象棋ai
    • 群聊
    • 九宫格抽奖
    • 拼图
    • 消消乐
    • 相册

python+mongodb数据抓取详细介绍

Python  /  管理员 发布于 7年前   243

分享点干货!!!

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_LDA实现方法详解
    下一条:
    Python安装Numpy和matplotlib的方法(推荐)
  • 昵称:

    邮箱:

    0条评论 (评论内容有缓存机制,请悉知!)
    最新最热
    • 分类目录
    • 人生(杂谈)
    • 技术
    • linux
    • Java
    • php
    • 框架(架构)
    • 前端
    • ThinkPHP
    • 数据库
    • 微信(小程序)
    • Laravel
    • Redis
    • Docker
    • Go
    • swoole
    • Windows
    • Python
    • 苹果(mac/ios)
    • 相关文章
    • 在python语言中Flask框架的学习及简单功能示例(0个评论)
    • 在Python语言中实现GUI全屏倒计时代码示例(0个评论)
    • Python + zipfile库实现zip文件解压自动化脚本示例(0个评论)
    • python爬虫BeautifulSoup快速抓取网站图片(1个评论)
    • vscode 配置 python3开发环境的方法(0个评论)
    • 近期文章
    • 在windows10中升级go版本至1.24后LiteIDE的Ctrl+左击无法跳转问题解决方案(0个评论)
    • 智能合约Solidity学习CryptoZombie第四课:僵尸作战系统(0个评论)
    • 智能合约Solidity学习CryptoZombie第三课:组建僵尸军队(高级Solidity理论)(0个评论)
    • 智能合约Solidity学习CryptoZombie第二课:让你的僵尸猎食(0个评论)
    • 智能合约Solidity学习CryptoZombie第一课:生成一只你的僵尸(0个评论)
    • 在go中实现一个常用的先进先出的缓存淘汰算法示例代码(0个评论)
    • 在go+gin中使用"github.com/skip2/go-qrcode"实现url转二维码功能(0个评论)
    • 在go语言中使用api.geonames.org接口实现根据国际邮政编码获取地址信息功能(1个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf分页文件功能(95个评论)
    • gmail发邮件报错:534 5.7.9 Application-specific password required...解决方案(0个评论)
    • 近期评论
    • 122 在

      学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..
    • 123 在

      Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..
    • 原梓番博客 在

      在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..
    • 博主 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..
    • 1111 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
    • 2016-10
    • 2016-11
    • 2018-04
    • 2020-03
    • 2020-04
    • 2020-05
    • 2020-06
    • 2022-01
    • 2023-07
    • 2023-10
    Top

    Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号 PHP交流群

    侯体宗的博客