风也温柔

计算机科学知识库

java爬虫的步骤 Python爬虫技术介绍和应用实例

  大家好,我是seng, 主要做的是BI、大数据、数据分析工作。今天主要讲如何编写爬虫,主要是技术方面的内容,内容包括基本爬虫基本技术,和框架的介绍。

  首先来先说一下的环境准备

  环境准备

  使用pyenv安装的不同版本,使用pyenv-隔离不同的环境

  我使用的环境是 3.5.1,在 6.5/7.1系统上,不过.1版本才支持 3,大家要注意下。

  安装过程如下:

  1、 安装配置pyenv到具体目录,本次安装都是用/

  2、 pyenv安装具体版本

  3、 安装pyenv-

  具体的安装可以参照我这个博客、下安装pyenv、( )和科学计算包的过程总结

  再来看一下爬虫的基本介绍java爬虫的步骤 Python爬虫技术介绍和应用实例,我这里主要介绍是定向的爬虫,如获取天善论坛里的所有问题等等。

  爬虫基本介绍

  爬虫应用的通用步骤

  1、 了解需要访问的网站的结构,入口是哪个urljava爬虫的步骤,指向那些....

  2、 从URL获取对应的HTML代码

  3、 解析HTML代码获取想要的信息

  4、 保存获取的信息

  5、 访问其他页面重复以上过程

  对应的使用方法:使用打开网页,使用解析网页,导出数据。

  示例:

   Consolas;color:black">fromConsolas;color:#4C4C4C"> urllib.request Consolas;color:black">importConsolas;color:#4C4C4C"> urlopenConsolas;color:#4C4C4C">

    fromConsolas;color:#4C4C4C"> bs4 Consolas;color:black">importConsolas;color:#4C4C4C"> BeautifulSoupConsolas;color:#4C4C4C">
    defmso-bidi-font-family:Consolas;color:#4C4C4C"> mso-bidi-font-family:Consolas;color:#990000">getTitlemso-bidi-font-family:Consolas;color:#4C4C4C">(url)mso-bidi-font-family:Consolas;color:#4C4C4C">:Consolas;color:#4C4C4C">
    <p>

        html = urlopen(url)
        bsObj = BeautifulSoup(html.read())
        title = bsObj.body.h1    mso-bidi-font-family:Consolas;color:black">returnConsolas;color:#4C4C4C"> titlecolor:#4C4C4C">

</p>
  读取数据后,还有许多工作,如清洗脏数据、自然语言读写、提交表单和、抓取页面、图像处理和文字识别、避免爬虫的抓取,更多相关内容,可以参考《网络数据采集》和我的相关博客。

  接下来是今天的主要内容,如何使用框架

  介绍

  提供一个爬虫框架,简化了一些操作如异常处理、自动重试啊、输出等等

  先给出一个简单示例, 抓取天气预报网站的天气信息

  java爬虫的步骤_分布式爬虫java_java开源爬虫框架

  代码如下:

   Consolas;color:#4C4C4C">cat getWeatherForcast.pyConsolas;color:#4C4C4C">

    # -*- coding: utf-8 -*-Consolas;color:#4C4C4C">
    importConsolas;color:#4C4C4C"> scrapycolor:#4C4C4C">
    classmso-bidi-font-family:Consolas;color:#445588"> mso-bidi-font-family:Consolas;color:#445588">GetweatherforcastSpidermso-bidi-font-family:Consolas;color:#445588">(scrapy.Spider)mso-bidi-font-family:Consolas;color:#445588">:Consolas;color:#4C4C4C">
        name = mso-bidi-font-family:Consolas;color:#DD1144">"getWeatherForcast"Consolas;color:#4C4C4C">
        allowed_domains = [mso-bidi-font-family:Consolas;color:#DD1144">"weather.com.cn"Consolas;color:#4C4C4C">]
    
        start_urls = (        mso-bidi-font-family:Consolas;color:#DD1144">&#39;http://www.weather.com.cn/weather/101010100.shtml&#39;Consolas;color:#4C4C4C">,
        ) mso-bidi-font-family:Consolas;color:black">defmso-bidi-font-family:Consolas;color:#4C4C4C"> mso-bidi-font-family:Consolas;color:#990000">parsemso-bidi-font-family:Consolas;color:#4C4C4C">(self, response)mso-bidi-font-family:Consolas;color:#4C4C4C">:Consolas;color:#4C4C4C">
            print(mso-bidi-font-family:Consolas;color:#DD1144">&#39;start scraper level1&#39;Consolas;color:#4C4C4C">)
            mso-bidi-font-family:Consolas;color:black">for forcasthtml Consolas;color:black">in response.xpath(Consolas;color:#DD1144">&#39;//ul[@class="t clearfix"]/li&#39;):
                 print(forcasthtml.xpath(mso-bidi-font-family:Consolas;color:#DD1144">&#39;h1/text()&#39;Consolas;color:#4C4C4C">).extract_first(),forcasthtml.xpath(mso-bidi-font-family:Consolas;color:#DD1144">&#39;p[@class="wea"]/text()&#39;Consolas;color:#4C4C4C">).extract_first())Consolas;color:#4C4C4C">
                 print(forcasthtml.xpath(mso-bidi-font-family:Consolas;color:#DD1144">&#39;p[@class="tem"]/span/text()&#39;Consolas;color:#4C4C4C">).extract_first(),forcasthtml.xpath(mso-bidi-font-family:Consolas;color:#DD1144">&#39;p[@class="tem"]/i/text()&#39;Consolas;color:#4C4C4C">).extract_first())Consolas;color:#4C4C4C">

  使用 .py -- ERROR

  注意,这里使用了的最基本的类,这里的操作就和我们使用、差不多,里面使用xpath的解析方式。

  XPath语法简介:

  也支持XPath的定位方式(不支持)

  XPath的一些语法比较有用,也列了一下:

  :根节点和非根节点

  —/div 根上的div节点

  —//div 所有div节点

  :定位属性

  —//@href 所有href属性

  —//a[@href='问题 - 天善智能:'] 所有href指向天善的属性

  :按位置选择

  —//a[3] 第3个节点

  分布式爬虫java_java开源爬虫框架_java爬虫的步骤

  —//table[last()] 最后的表格

  —//a[() < 3] 前3个表格

  :通配符 (*)

  —//table/tr/* 所有表格的所有内容

  —//div[@*] div tag的所有属性

  结果如下:

  前面先说了一个基本的介绍,接下来说一下的安装

  java爬虫的步骤_分布式爬虫java_java开源爬虫框架

  安装

  

    color:#4C4C4C">准备:
    pip mso-bidi-font-family:Consolas;color:black">installmso-bidi-font-family:Consolas;color:#4C4C4C"> ScrapyConsolas;color:#4C4C4C">
    --mso-bidi-font-family:Consolas;color:#999988">生成projectConsolas;color:#4C4C4C">
    scrapy startproject weatherforcast
    --mso-bidi-font-family:Consolas;color:#999988">生成爬虫Consolas;color:#4C4C4C">

  会生成类似如下的文件结构

  其中items.py是返回属性列的定义,.py主要用于数据的输出,.py用于属性设置。

  具体的在目录下,这是item.py的一个示例

  

  class (.Item):

  # the for your item here like:

   = .Field()

   = .Field()

   = .Field()

  pass

  读取网页信息

  从天善论坛读取 帖子的基本信息

  java爬虫的步骤_java开源爬虫框架_分布式爬虫java

  我们拿官网的一个示例来说一下函数和yield的特性

  分布式爬虫java_java开源爬虫框架_java爬虫的步骤

  :定义一个解析函数,上面的示例就定义了遇见/下的href连接,调用函数解析,可以使用多个函数,框架会将yield对应的调用放到队列里面,普通的脚本会顺序执行, 框架使用了yield实现了异步调用,还有一个yield的应用,就是这句

  这是一个返回值, 会把这个数据放到items.py定义的对应内容里面。

  使用解析的数据导出可以使用以下2种方式

  1。使用-o的命令函参数

   crawl -o .csv -t csv --nolog

  2.设置,修改输出方式

  首先需要修改 .py 打这个参数打开

   = {

  '..e': 300,

  }

  然后可以修改.py

  java爬虫的步骤_java开源爬虫框架_分布式爬虫java

  这是一个写入的例子

  java爬虫的步骤_分布式爬虫java_java开源爬虫框架

  Scapy会把items.py定义的格式写入。

  接下来 我会介绍一下 crawl的例子java爬虫的步骤,这部分我觉得是最好用的东西, 通过规则对应就能很轻松地把数据拿过来。

  天善现在的入口是问题 - 天善智能:专注于商业智能BI和数据分析、大数据领域的垂直社区平台

  问题和问题目录都在//下

  区别是//sort_开始的是目录

  按原来的做法,就需要模拟一页一页翻页, 但是已经遍历的页面,只需要定义规则就可以了。

  通过这段代码 就可以把所有问题列表拿出来了

  java爬虫的步骤_分布式爬虫java_java开源爬虫框架

  核心就在规则的对应

  rules = (

  Rule((allow=('/',)), ='', =True),

  Rule((allow=('/*', )),='',=True),

  Rule((allow=('/d+', )), =''),

  )

  /

  /* 里面的url继续遍历, 遇见/19535这种格式的就是问题列表了,解析就可以了。使用 crawl -o .csv -t csv --nolog 就可以把所有问题拿到了。

  上面的示例就说完了。关于的更多内容,可以看官网 | ,建议看pdf格式的, 我觉得和网页格式的优点区别,例子更多一点。

  最后我把《网络数据采集》读后总结 --第12章避免爬虫的抓取陷阱里面的内容 摘录了一部分。

  避免爬虫的抓取陷阱检查清单:

  1.检查页面是否由生成

  2.检查提交的表单是否包含所有应该提交的字段,包括隐含字段

  可以使用’s 去检查

  3.如果某些站点,保持不住,注意

  文章来源:https://zhuanlan.zhihu.com/p/24970874