Web Scraping - Python;Запись в CSV - PullRequest
0 голосов
/ 07 октября 2018

Я пытаюсь записать данные с веб-сайта.Данные отображаются в виде таблицы в HTML с тегами, перечисляющими, когда в рейтинге указывается новый блок данных, и для каждого описательного элемента об элементе в рейтинге.Этот список представляет собой рейтинг 500 лучших компьютеров, перечисленных 1-100 с каждым элементом 1, 2, 3, 4 и т. Д., Отмеченным '', и каждой характеристикой компьютера, обозначенной как '' (это память, максимальная мощность и т. Д.).).

Вот мой код:

# read the data from a URL
url = requests.get("https://www.top500.org/list/2018/06/")
url.status_code
url.content


# parse the URL using Beauriful Soup
soup = BeautifulSoup(url.content, 'html.parser')

filename = "computerRank10.csv"
f = open(filename,"w")

headers = "Rank, Site, System, Cores, RMax, RPeak, Power\n"
f.write(headers)

for record in soup.findAll('tr'):
# start building the record with an empty string
  tbltxt = ""
  tbltxt = tbltxt + data.text + ";"
  tbltxt = tbltxt.replace('\n', ' ')
  tbltxt = tbltxt.replace(',', '')
#    f.write(tbltxt[0:-1] + '\n')
f.write(tbltxt + '\n')

f.close()

Я ничего не получаю, и мой CSV-файл всегда пуст

Ответы [ 2 ]

0 голосов
/ 07 октября 2018

Попробуйте приведенный ниже скрипт.Он должен собрать все данные и записать их в CSV-файл:

import csv
import requests
from bs4 import BeautifulSoup

link = "https://www.top500.org/list/2018/06/?page={}"

def get_data(link):
    for url in [link.format(page) for page in range(1,6)]:
        res = requests.get(url)
        soup = BeautifulSoup(res.text,"lxml")

        for items in soup.select("table.table tr"):
            td = [item.get_text(strip=True) for item in items.select("th,td")]
            writer.writerow(td)

if __name__ == '__main__':
    with open("tabularitem.csv","w",newline="") as infile: #if encoding issue comes up then replace with ('tabularitem.csv', 'w', newline="", encoding="utf-8")
        writer = csv.writer(infile)
        get_data(link)
0 голосов
/ 07 октября 2018

Вы должны использовать модуль csv в стандартной библиотеке Python.

Вот более простое решение:

import requests
import csv
from bs4 import BeautifulSoup as bs

url = requests.get("https://www.top500.org/list/2018/06")
soup = bs(url.content, 'html.parser')

filename = "computerRank10.csv"
csv_writer = csv.writer(open(filename, 'w'))


for tr in soup.find_all("tr"):
    data = []
    # for headers ( entered only once - the first time - )
    for th in tr.find_all("th"):
        data.append(th.text)
    if data:
        print("Inserting headers : {}".format(','.join(data)))
        csv_writer.writerow(data)
        continue

    for td in tr.find_all("td"):
        if td.a:
            data.append(td.a.text.strip())
        else:
            data.append(td.text.strip())
    if data:
        print("Inserting data: {}".format(','.join(data)))
        csv_writer.writerow(data)
...