这是我想废弃的代码,我对名称类和信息类文本感兴趣。我不知道如何通过“角色”标记废弃。有什么想法吗?
主文件.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()
2条答案
按热度按时间wtzytmuj1#
如果您更详细地了解xpaths,您会发现
@
符号不仅用于访问类,还用于访问标记的任何属性。您可以使用
bq8i3lrv2#
您的程式码中有几个问题:
1.您正试图对字符串使用xpath和css表达式。一旦调用了
get
、getall
、extract
或extract_first
方法之一,返回值就不再是选择器,也不能再用于链接xpath查询。1.“rowgroup”滚动位于
<li>
元素上,而不是<div>
上。1.作业选择器中未使用相对XPath表达式。
1.您将需要为每个项创建一个新的项示例,而不是回收同一个项,因为字典之类的项是可变的。
实际上,您要做的事情更接近于: