如何通过使用“角色”标签来与scrapy一起报废?

dfuffjeb  于 2022-12-13  发布在  其他
关注(0)|答案(2)|浏览(127)

这是我想废弃的代码,我对名称类和信息类文本感兴趣。我不知道如何通过“角色”标记废弃。有什么想法吗?

主文件.py

import scrapy
from ..items import UniversityItem


class UniversityLecturersSpider(scrapy.Spider):
    name = 'university_lecturers'
    allowed_domains = ['www.runi.ac.il']
    start_urls = ['https://www.runi.ac.il/en/about/management/']

    def parse(self,response):

        items=UniversityItem()
        lecturers=response.xpath('//div[@role="rowgroup"]/li/text()').extract()

        for lecturer in lecturers:

                name=lecturer.css('div.name::text').extract_first()
                job=lecturer.xpath('//div[@class="info"]/p/text()').extract_first()
       
                items['name']=name
                items['job']=job
                yield items

我的item.py:

import scrapy

class UniversityItem(scrapy.Item):
    # define the fields for your item here like:
    name = scrapy.Field()
    job = scrapy.Field()
wtzytmuj

wtzytmuj1#

如果您更详细地了解xpaths,您会发现@符号不仅用于访问类,还用于访问标记的任何属性。
您可以使用

lecturers = response.xpath('//li[@role="rowgroup"]')
for lecturer in lecturers:
    name = lecturer.css('div.name::text').extract_first()            
    job = lecturer.css('div.info > p::text').extract_first()
    # your code
bq8i3lrv

bq8i3lrv2#

您的程式码中有几个问题:
1.您正试图对字符串使用xpath和css表达式。一旦调用了getgetallextractextract_first方法之一,返回值就不再是选择器,也不能再用于链接xpath查询。
1.“rowgroup”滚动位于<li>元素上,而不是<div>上。
1.作业选择器中未使用相对XPath表达式。
1.您将需要为每个项创建一个新的项示例,而不是回收同一个项,因为字典之类的项是可变的。
实际上,您要做的事情更接近于:

for elem in response.xpath("//li[@role='rowgroupt']"):
    name = elem.xpath('./div[@class='name']/text()').get()
    job = elem.xpath('./div[@class='info']/p/text()').get()
    item = UniversityItem()
    item['name'] = name
    item['job'] = job
    yield item

相关问题