表头数据的烧瓶webscraper问题

时间:2020-11-12 05:07:11

标签: python beautifulsoup

我正在尝试制作一个可获取游戏标题信息的网络爬虫。目前,我正在从Wikipedia的ps4游戏列表中抓取。之所以这样做,是因为我想学习如何将Webscraper之类的脚本合并到flask项目中。我的工作效果很好,但是我无法获取数据。列名称在此处列出,我希望将它们添加到我生成的csv文件中。我认为通过尝试定位


标记,可以得到所需的内容,但效果不佳。这是我最近的尝试:

import requests
from bs4 import BeautifulSoup
import csv

class GameScraper:
    results = []

    def fetch(self, url):
        return requests.get(url)

    def parse(self, html):
        content = BeautifulSoup(html, 'lxml')
        table = content.find(id="softwarelist")
        rows = table.findAll('tr')
        header = table.find('thead')
        header_row = header.findAll('tr')
        results = header_row.findAll('th')       
        

        for row in rows:           
            if len(row.findAll('td')):
                self.results.append([data.text for data in row.findAll('td')])

    def to_csv(self):
        with open('ps4.csv', 'w') as csv_file:
            writer = csv.writer(csv_file)
            writer.writerows(self.results)

    def run(self):        
        ps4_list = self.fetch('https://en.wikipedia.org/wiki/List_of_PlayStation_4_games')
        self.parse(ps4_list.text)
        self.to_csv()

if __name__ == '__main__':
    scraper = GameScraper()
    scraper.run()

我目前收到此错误:

AttributeError: 'NoneType' object has no attribute 'findAll'

在此行:

header_row = header.findAll('tr')

1 个答案:

答案 0 :(得分:0)

看起来,当您向维基百科发送请求时,维基百科返回的页面不同于向普通用户显示的页面。在程序接收的页面中,用户端头中的数据(例如标题,类型,开发人员,平台,发布日期)实际上只是存储在<th>中的<tbody>中。