Python Web Scraper / Crawler - HTML表到Excel电子表格

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (18)

我正在尝试制作一个网络抓取器,它将从网站中提取表格,然后将它们粘贴到Excel电子表格中。我是Python的极端初学者(一般编码) - 几天前开始学习。

那么,我该如何制作这个网络刮刀/抓取工具呢?这是我的代码:

import csv
import requests
from BeautifulSoup import BeautifulSoup

url = 'https://www.techpowerup.com/gpudb/?mobile=0&released%5B%5D=y14_c&released%5B%5D=y11_14&generation=&chipname=&interface=&ushaders=&tmus=&rops=&memsize=&memtype=&buswidth=&slots=&powerplugs=&sort=released&q='
response = requests.get(url)
html = response.content

soup = BeautifulSoup(html)
table = soup.find('table', attrs={'class': 'processors'})

list_of_rows = []
for row in table.findAll('tr')[1:]:
list_of_cells = []
for cell in row.findAll('td'):
    text = cell.text.replace(' ', '')
    list_of_cells.append(text)
list_of_rows.append(list_of_cells)

outfile = open("./GPU.csv", "wb")
writer = csv.writer(outfile)
writer.writerow(["Product Name", "GPU Chip", "Released", "Bus", "Memory", "GPU clock", "Memory clock", "Shaders/TMUs/ROPs"])
writer.writerows(list_of_rows)

现在上面代码中的网站程序WORKS。

现在,我想从以下网站上删除表格:https//www.techpowerup.com/gpudb/2990/radeon-rx-560d

请注意,此页面上有几个表。我应该添加/更改什么才能让程序在此页面上运行?我正试图获得所有的表,但如果有人能帮助我甚至得到其中一个,我会非常感激!

提问于
用户回答回答于

从本质上讲,您只需要修改问题中的代码,以说明网站有多个表格!

关于BeautifulSoup(BS)的真正整洁(或者,我敢说,很漂亮)是findAll方法!这会创建一个可以迭代的BS对象!

所以,假设你的源代码中有5个表。你可以想象,运行tables = soup.findAll("table"),它会返回源代码中每个表对象的列表!然后,您可以迭代该BS对象并从每个相应的表中提取信息。

您的代码可能如下所示:

import csv
import requests
import bs4

url = 'https://www.techpowerup.com/gpudb/2990/radeon-rx-560d'
response = requests.get(url)
html = response.content

soup = bs4.BeautifulSoup(html, "lxml")

tables = soup.findAll("table")

tableMatrix = []
for table in tables:
    #Here you can do whatever you want with the data! You can findAll table row headers, etc...
    list_of_rows = []
    for row in table.findAll('tr')[1:]:
        list_of_cells = []
        for cell in row.findAll('td'):
            text = cell.text.replace(' ', '')
            list_of_cells.append(text)
        list_of_rows.append(list_of_cells)
    tableMatrix.append((list_of_rows, list_of_cells))
print(tableMatrix)

这段代码有效,但我会注意到我没有添加原始代码所具有的任何CSV文件格式!你必须重新设计它,但它适合你。但是我在你可以绝对自由地为你在源中为每个表做任何事情的位置做了评论。您可以决定findAll("th")每个表对象中的元素并像这样填充CSV文件,或者您可以从单元格本身中提取信息。现在我将每个表的单元格数据保存在元组中,我将其附加到列表tableMatrix

我希望这可以帮助您进行Python和BeautifulSoup冒险!

资料来源:

用户回答回答于

扫码关注云+社区

领取腾讯云代金券