实验对象:四川大学公共管理学院官网–新闻动态页
试目的:运用Scrapy框架进行实际信息的采集以巩固与加强信息搜索能力
试行过程:分析采集实体->确定采集方法->制定爬取规则->编写代码并调节->得到数码
———————————欢迎纠错和提问!24钟头在线未起烊!!———————


目录
  1. 浅析采集实体
  2. 规定采集方法
  3. 制订爬取规则
  4. 修代码并调节
  5. 收获数码
  6. 有的常用排错方法及技巧
  7. 泛报错信息汇集
  8. 小结及感悟

1. 解析采集实体

俺们此次数据收集的靶子内容是地表水大公管的新闻资讯。首先,我们需要分析网页的重大内容,并确定数据收集的实体。

新闻资讯首页1

新闻资讯首页2

讯详情页

咱俩可以行使开发者工具要查看网页源码的章程对网页内容进行更深入之解析。

chrome开发者工具

足看,我们用募的实业一共发四个,分别是标题(title),日期(date),内容(content)和图片(img)。

2. 规定采集方法

咱既了解及,采集的实业共4只,其中,标题和日期在首页和详情页都产生展示,因此我打算先收集首页转向详情页的链接,再进入次叠详情页进行多少收集。
首页的资讯列表是分页显示的,我们尚待思想采集下一样页新闻列表的措施。

首页的下同样页按钮

其它页的产一致页按钮

观测可知,我们连无可知确切定位及下同样页的url,一方面下一样页按钮的url路径与另页码的不二法门相同,另一方面它并无是永恒于同一个顺序的。
可我们可以在<li
class=”c”></li>标签中取当前页面的页码,与生一样页的url固定格式进行字符串连接得到实在的产一致页。

3. 制定爬取规则

此自己还使用css选择器的点子进行元素定位,并形容有了一体化路径(如果无确定是否可规范定位及有元素,尽量写完整路径。)

url规则

div.pb30.mb30 div.right_info.p20.bgf9 ul.index_news_ul.dn li
a.fl::attr(href)

next_page规则

div.w100p div.px_box.w1000.auto.ovh.cf div.pb30.mb30
div.mobile_pager.dn li.c::text

title规则

div.w1000.auto.cf div.w780.pb30.mb30.fr div.right_info.p20
div.detail_zy_title h1::text

time规则

div.w1000.auto.cf div.w780.pb30.mb30.fr div.right_info.p20
div.detail_zy_title p::text

content规则1

content规则2

这里少独段落的途径不一致,为了保一定量个段子都足以于集到,选用范围比较生之选择器。

div.w1000.auto.cf div.w780.pb30.mb30.fr div.right_info.p20
div.detail_zy_c.pb30.mb30 p span::text

img规则

div.w1000.auto.cf div.w780.pb30.mb30.fr div.right_info.p20
div.detail_zy_c.pb30.mb30 p.MsoNormal img::attr(src)

4. 编代码并调节

scrapy startproject ggnews
cd /ggnews/ggnews

每当此修改items.py的代码
# –– coding: utf-8 –

# Define here the models for your scraped items
#
# See documentation in:
# http://doc.scrapy.org/en/latest/topics/items.html

import scrapy

class GgnewsItem(scrapy.Item):
    # define the fields for your item here like:
    # name = scrapy.Field()
    title = scrapy.Field()
    time = scrapy.Field()
    content = scrapy.Field()
    img = scrapy.Field()

cd spiders

编写ggnews.py

import scrapy

from ggnews.items import GgnewsItem

class GgnewsSpider(scrapy.Spider):
    name = "ggnews"
    start_urls = [
        'http://ggglxy.scu.edu.cn/index.php?c=special&sid=1',
    ]

    def parse(self, response):
        for href in response.css('div.pb30.mb30 div.right_info.p20.bgf9 ul.index_news_ul.dn li a.fl::attr(href)'):
            url = response.urljoin(href.extract())
            yield scrapy.Request(url, callback=self.parse2)

            next_page = response.css('div.w100p div.px_box.w1000.auto.ovh.cf div.pb30.mb30 div.mobile_pager.dn li.c::text').extract_first()
            if next_page is not None:
                next_url = int(next_page) + 1
                next_urls = '?c=special&sid=1&page=%s' % next_url
                print next_urls
                next_urls = response.urljoin(next_urls)
                yield scrapy.Request(next_urls,callback = self.parse)

    def parse2(self, response):
        items = []
        for new in response.css('div.w1000.auto.cf div.w780.pb30.mb30.fr div.right_info.p20'):
                item = GgnewsItem()
                item['title'] = new.css('div.detail_zy_title h1::text').extract_first(),
                item['time'] = new.css('div.detail_zy_title p::text').extract_first(),
                item['content'] = new.css('div.detail_zy_c.pb30.mb30 p span::text').extract(),
                item['img'] = new.css('div.detail_zy_c.pb30.mb30 p.MsoNormal img::attr(src)').extract(),
                items.append(item)

        return items

5. 取得数码

scrapy crawl ggnews -o ggnews.xml

一对爬取数据

履行结果参数

一些xml数据展示

6. 有科普的排错方法和技术

如何避免出现错误空格

比方您以形容代码的经过中,不小心把空格和制表符<tab>混用,就异常易报错–
化解办法是装你的IDE(代码编辑器)可以吧你显得区分空格和制表符,就如这么

空格和制表符

切切实实装方法要自行百度:‘xxx如何展示空格和制表符’

如何检查xpath/css定位是否是

为此scrapy shell进行调剂
课在这边:http://scrapy-chs.readthedocs.io/zh\_CN/1.0/topics/shell.html

哪查看错误信息

7. 广泛报错信息汇总

8. 总与清醒

每当拓展数量收集的长河中,爬取数据的计及规则是数码收集的基本与花。不仅需要针对整个页面的结构和布局有深深之知晓和认识,而且需要耐心与细,经过再三对比与推敲,才能够如自己的爬虫规则更完善。

网站地图xml地图