我是 python 和網路抓取的新手,我希望得到一些建議。我已經創建了蜘蛛,但是 json 輸出只提供了每個表的第一個元素。誰能告訴我這是什么原因?
import scrapy
class ActaSpider(scrapy.Spider):
name = 'acta_spider'
start_urls = ['https://www.fcf.cat/acta/2022/futbol-11/cadet-primera-divisio/grup-2/1c/la-salle-bonanova-ce-a/1c/lhospitalet-centre-esports-b']
def parse (self, response):
for actaelements in response.css('table.acta-table'):
try:
yield {
'name' : actaelements.css('a::text').get(),
'link' : actaelements.css('a').attrib['href'],
}
except:
yield {
'name' : actaelements.css('a::text').get(),
'link' : 'Link Error',
}
我的最終目標是創建一個 JSON 檔案,為每個表創建必要的資訊:
{
"DadesPartit":
{
"Temporada": "2021-2022",
"Categoria": "Cadet",
"Divisio": "Primera",
"Grup": 2,
"Jornada": 28
},
"TitularsCasa":
[
{
"Nom": "IGNACIO",
"Cognom":"FERNáNDEZ ARTOLA",
"Link": "https://.."
},
{
"Nom": "JAIME",
"Cognom":"FERNáNDEZ ARTOLA",
"Link": "https://.."
},
{
"Nom": "BRUNO",
"Cognom":"FERRé CORREA",
"Link": "https://.."
}
],
"SuplentsCasa":
[
{
"Nom": " MARC",
"Cognom":"GIMéNEZ ABELLA",
"Link": "https://.."
}
],
"CosTecnicCasa":
[
{
"Nom": " JORDI",
"Cognom":"LORENTE VILLENA",
"Llicencia": "E"
}
],
"TargetesCasa":
[
{
"Nom": "IGNACIO",
"Cognom":"FERNáNDEZ ARTOLA",
"Tipus": "Groga",
"Minut": 65
}
],
"Arbitres":
[
{
"Nom": " ALEJANDRO",
"Cognom":"ALVAREZ MOLINA",
"Delegacio": "Barcelona1"
}
],
"Gols":
[
{
"Nom": "NATXO",
"Cognom":"MONTERO RAYA",
"Minut": 5,
"Tipus": "Gol de penal"
}
],
"Estadi":
{
"Nom": "CAMP DE FUTBOL COL·LEGI LA SALLE BONANOVA,
"Direccio":"C/ DE SANT JOAN DE LA SALLE, 33, BARCELONA"
},
"TitularsFora":
[
{
"Nom": "MARTI",
"Cognom":"MOLINA MARTIMPE",
"Link": "https://.."
},
{
"Nom": " XAVIER",
"Cognom":"MORA AMOR",
"Link": "https://.."
},
{
"Nom": " IVAN",
"Cognom":"ARRANZ MORALES",
"Link": "https://.."
}
],
"SuplentsFora":
[
{
"Nom": "OLIVER",
"Cognom":"ALCAZAR SANCHEZ",
"Link": "https://.."
}
],
"CosTecnicFora":
[
{
"Nom": " RAFAEL",
"Cognom":"ESPIGARES MARTINEZ",
"Llicencia": "D"
}
],
"TargetesFora":
[
{
"Nom": " ORIOL",
"Cognom":"ALCOBA LAGE",
"Tipus": "Groga",
"Minut": 34
}
]
}
謝謝,瓊
uj5u.com熱心網友回復:
CSS 選擇器回傳匹配元素的串列。由于只有一個元素與您的查詢匹配,因此 for 回圈僅執行一次并僅檢索第一個鏈接。您可以進行的一項小調整是使用 xpath,您可以選擇表的所有子項,并且您的代碼應該按預期作業。
只需將您的 for 回圈更改為:
for actalements in response.xpath('//table[@]/*'):
你的其余代碼應該按照你期望的方式作業。
uj5u.com熱心網友回復:
發生這種情況是因為您的 css 選擇器錯誤,它僅適用于表格而不適用于專案。如果它是“無”,您也可以洗掉try except并給鏈接一個默認值。
import scrapy
class ActaSpider(scrapy.Spider):
name = 'acta_spider'
start_urls = ['https://www.fcf.cat/acta/2022/futbol-11/cadet-primera-divisio/grup-2/1c/la-salle-bonanova-ce-a/1c/lhospitalet-centre-esports-b']
def parse(self, response):
for actaelements in response.css('table.acta-table tbody tr'):
yield {
'name': actaelements.css('a::text').get(),
'link': actaelements.css('a::attr(href)').get(default='Link Error'),
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/496227.html
標籤:python-3.x 网页抓取 刮擦
上一篇:從多個URL中提取p個標簽
下一篇:如何使用劇作家捕捉特定重定向?
