在 Scrapy 中使用 For 循环将 Xpath 值附加到列表

我想尝试在 Scrapy 中自动化我的 html 表格抓取。这是我到目前为止所拥有的:


import scrapy

import pandas as pd


class XGSpider(scrapy.Spider):


    name = 'expectedGoals'


    start_urls = [

        'https://fbref.com/en/comps/9/schedule/Premier-League-Scores-and-Fixtures',

    ]


    def parse(self, response):


        matches = []


        for row in response.xpath('//*[@id="sched_ks_3232_1"]//tbody/tr'):


            match = {

                'home': row.xpath('td[4]//text()').extract_first(),

                'homeXg': row.xpath('td[5]//text()').extract_first(),

                'score': row.xpath('td[6]//text()').extract_first(),

                'awayXg': row.xpath('td[7]//text()').extract_first(),

                'away': row.xpath('td[8]//text()').extract_first()

            }


            matches.append(match)


        x = pd.DataFrame(

            matches, columns=['home', 'homeXg', 'score', 'awayXg', 'away'])


        yield x.to_csv("xG.csv", sep=",", index=False)

它工作正常,但是如您所见,我正在对对象的键(home、homeXg等)进行硬编码match。我想自动将键抓取到列表中,然后用所述列表中的键初始化字典。问题是,我不知道如何按索引遍历 xpath。举个例子,


 headers = [] 

        for row in response.xpath('//*[@id="sched_ks_3260_1"]/thead/tr'): 

            yield{

                'first': row.xpath('th[1]/text()').extract_first(),

                'second': row.xpath('th[2]/text()').extract_first()

            }

是否可以将th[1]、th[2]等th[3]插入 for 循环,将数字作为索引,并将值附加到列表中?例如


row.xpath('th[i]/text()').extract_first() ?


一只萌萌小番薯
浏览 102回答 1
1回答

弑天下

未经测试但应该可以工作:column_index = 1columns = {}for column_node in response.xpath('//*[@id="sched_ks_3260_1"]/thead/tr/th'):    column_name = column_node.xpath('./text()').extract_first()    columns[column_name] = column_index    column_index += 1    matches = []for row in response.xpath('//*[@id="sched_ks_3232_1"]//tbody/tr'):    match = {}            for column_name in columns.keys():        match[column_name] = row.xpath('./td[{index}]//text()'.format(index=columns[column_name])).extract_first()    matches.append(match)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python