我正在尝试制作一个可获取游戏标题信息的网络爬虫。目前,我正在从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')
答案 0 :(得分:0)
看起来,当您向维基百科发送请求时,维基百科返回的页面不同于向普通用户显示的页面。在程序接收的页面中,用户端头中的数据(例如标题,类型,开发人员,平台,发布日期)实际上只是存储在<th>
中的<tbody>
中。