鱼C论坛

 找回密码
 立即注册
查看: 804|回复: 4

[已解决]今天接触scrapy,看到官方文档有一处疑问

[复制链接]
发表于 2018-12-24 21:08:18 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 学程序的古代人 于 2018-12-24 21:20 编辑

import scrapy


class AuthorSpider(scrapy.Spider):
    name = 'author'

    start_urls = ['http://quotes.toscrape.com/']

    def parse(self, response):
        # follow links to author pages
        for href in response.css('.author + a::attr(href)'):
            yield response.follow(href, self.parse_author)

        # follow pagination links
        for href in response.css('li.next a::attr(href)'):
            yield response.follow(href, self.parse)

    def parse_author(self, response):
        def extract_with_css(query):                        #这里不明白
            return response.css(query).extract_first().strip()                #query代表了何种规则吗?怎么定义的呢?

        yield {
            'name': extract_with_css('h3.author-title::text'),
            'birthdate': extract_with_css('.author-born-date::text'),
            'bio': extract_with_css('.author-description::text'),
        

定义extract_with_css(query): 时,query 应该如何理解?为什么这样就可以提取出来
最佳答案
2018-12-25 09:44:00
response.css(query).extract_first().strip()   ---->这个调用的是CSS选择器,scrapy支持xpath、css、正则的提取元素的方法,你只要调用就可以了,而query传入的是CSS选择器的语法
参数不需要定义,只要你调用该函数的时候传入数值就可以了
  1.         yield {
  2.             'name': extract_with_css('h3.author-title::text'),
  3.             'birthdate': extract_with_css('.author-born-date::text'),
  4.             'bio': extract_with_css('.author-description::text')}
  5. 你在这里调用时就要传入css选择器的语法

复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-12-24 22:39:28 | 显示全部楼层
query是个参数,传入的是CSS选择器的语法
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-12-25 08:43:14 | 显示全部楼层
_谪仙 发表于 2018-12-24 22:39
query是个参数,传入的是CSS选择器的语法

还是不大明白。。
请问,query 不用先定义的吗?为什么他就可以代表css的选择器呢?
谢谢!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-12-25 09:44:00 | 显示全部楼层    本楼为最佳答案   
response.css(query).extract_first().strip()   ---->这个调用的是CSS选择器,scrapy支持xpath、css、正则的提取元素的方法,你只要调用就可以了,而query传入的是CSS选择器的语法
参数不需要定义,只要你调用该函数的时候传入数值就可以了
  1.         yield {
  2.             'name': extract_with_css('h3.author-title::text'),
  3.             'birthdate': extract_with_css('.author-born-date::text'),
  4.             'bio': extract_with_css('.author-description::text')}
  5. 你在这里调用时就要传入css选择器的语法

复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-12-27 23:08:09 | 显示全部楼层
_谪仙 发表于 2018-12-25 09:44
response.css(query).extract_first().strip()   ---->这个调用的是CSS选择器,scrapy支持xpath、css、正则 ...

谢谢!是自己太小白了,最近又看了两天又明白了点
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-28 19:31

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表