scrapy - 如何在response.css中正确定义和scrapy中的yield
问题描述
我是 Scrapy 的新手,我尝试了两天的一件事,但仍然没有成功。我正在练习提取https://sofifa.com/中列出的足球运动员的信息。我采用了来自https://docs.scrapy.org/的代码示例,并对其进行了如下编辑。我正在练习提取的信息是OVA。
有谁知道我应该如何在下面的代码中正确定义“span.something ...”的元素?
非常感谢,詹姆斯
import scrapy
class ToScrapeCSSSpider(scrapy.Spider):
name = "player-css"
start_urls = [
'https://sofifa.com/players?type=all&tm%5B0%5D=1&r=210024&set=true',
]
**def parse(self, response):
for playerInfor in response.css("div.card"):
yield {**
**'OVA': playerInfor.css("span.bp3-tag p::bp3-tag p").extract()**
}
next_page_url = response.css("li.next > a::attr(href)").extract_first()
if next_page_url is not None:
yield scrapy.Request(response.urljoin(next_page_url))
解决方案
使用这个 css 选择器response.css("tbody.list")
而不是response.css("div.card")
因为response.css("tbody.list")
数据很容易提取,但是当我使用response.css("div.card")
结果时,结果是一些带有预期输出的空列表。
for playerInfor in response.css("tbody.list"):
print( playerInfor.css('td.col.col-oa.col-sort span::text').getall())
输出
['87','84','84','82','80','80','80','80','79','79','79','79',' 79'、'78'、'77'、'77'、'77'、'76'、'76'、'76'、'75'、'75'、'74'、'74'、'73' , '72', '72', '70', '62', '62', '60', '58', '56']
另一种方法
def parse(self, response):
mydata =response.css('tbody.list td.col.col-oa.col-sort span::text').extract()
yield {
"OVA":mydata
}
#mydata的输出
['87','84','84','82','80','80','80','80','79','79','79','79',' 79'、'78'、'77'、'77'、'77'、'76'、'76'、'76'、'75'、'75'、'74'、'74'、'73' , '72', '72', '70', '62', '62', '60', '58', '56']
推荐阅读
- python - 乌龟显示错误,以前可以正常工作
- java - 当我按下“新项目”时,如何在 Intellij Idea 的开始菜单中配置技术列表
- java - 是否可以自定义java流groupingBy的key?
- python - 将字典键和值转换为单独的列表?
- c - 在C中使用链表和横向树按顺序创建家谱
- spring - Spring Batch - AmqpWriter 和 AmqpReader 示例
- tensorflow - CUDA 版本崩溃
- javascript - React Native FlatList 水平滚动
- javascript - Nodejs,Binance API:此请求的时间戳在 recvWindow 之外
- sql - 2个表的SQL查询没有我想搜索2的键