码迷,mamicode.com
首页 > 其他好文 > 详细

04 蜘蛛spider

时间:2019-10-17 17:15:38      阅读:82      评论:0      收藏:0      [点我收藏+]

标签:回调函数   code   内容   定义   方法   tor   div   yield   for   

概述:
Spider定义如何爬取某个网站, 包括爬取的动作, 以及如何从网页的内容中提取结构化数据.
# -*- coding: utf-8 -*-
import scrapy
from tutorial.items import QuoteItem

class QuotesSpider(scrapy.Spider):
    name = quotes
    allowed_domains = [quotes.toscrape.com]
    start_urls = [http://quotes.toscrape.com/]

    def parse(self, response):
        quotes = response.css(.quote)
        for quote in quotes:

            Item = QuoteItem()

            Item[text] = quote.css(.text::text).extract_first()
            Item[author] = quote.css(.author::text).extract_first()
            Item[tags] = quote.css(.tags .tag::text).extract()

            yield Item  #如此一来, 首页的所有内容被解析出来, 并被赋值成了一个个QuoteItem

            next = quote.css(.pager .next a::attr(href)).extract_first()
            url = response.urljoin(next)
            yield scrapy.Request(url=url, callback=self.parse)
            #第一句代码首先通过CSS选择器获取下一个页面的链接, 即要获取超链接a中的属性,这里用到了 ::attr(href) 操作
            #然后调用 extract_first() 方法获取内容
            #第二句调用urljoin方法, 将相对url构造成一个绝对url, 例如: 获取到的下一页的地址是 /page/2, urljoin方法处理后的到的结果就是
            #http://quotes.toscrape.com/page/2/
            #第三句通过url 和 callback变量构造了一个新的请求, 回调函数callback依然使用 parse()方法, 这个请求完成后,响应会重新经过parse方法处理,得到第二页的解析结果,然后生成第二页的下一页, 也就是第三页的请求, 这样爬虫就进入了一个循环, 直到最后一页.

 

04 蜘蛛spider

标签:回调函数   code   内容   定义   方法   tor   div   yield   for   

原文地址:https://www.cnblogs.com/zhangjian0092/p/11693113.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!