URL-файл, чтобы очистить таблицу и сохранить в CSV - PullRequest
0 голосов
/ 06 марта 2019

Я очень новичок в кодировании в целом.Я знаю Excel и немного VBA, но я застреваю при соединении частей.У меня есть список URL-адресов, и ниже приведены выходные данные, которые я хочу получить за 1 URL-адрес, но у меня есть 500 URL-адресов с одинаковыми данными.То, что я пытаюсь сделать, это прочитать файл url, получить данные и сохранить выходные данные в CSV.Пожалуйста, помогите мне понять это.Я знаю, что это просто, и я нашел так много способов сделать это, но сложить все миры сложно.Спасибо Майк

import bs4 as bs
import urllib.request
import pandas as pd
import csv 

with open("tvlocation.csv","r") as file:
file.write('dfs = pd.read_html('tvurl.txt')
for df in dfs:
    print(df)

file.close()

Ответы [ 2 ]

0 голосов
/ 06 марта 2019

Вы можете использовать список словарей.

import urllib.request
from urllib.request import urlopen
from bs4 import BeautifulSoup
import csv

url_list = ['https://nocable.org/browse-stations/callsign/cadenatres-linares-nl',
            'https://nocable.org/browse-stations/callsign/k27hm-d-quanah-tx']
data = []
for url in url_list:
    page = urllib.request.urlopen(url)
    soup = BeautifulSoup(page, "html.parser")

    urldict = {}
    tr = soup.find_all('tr')
    for row in tr:
        th = soup.find_all('th')
        td = soup.find_all('td')

    for item in range(0,len(th)):    
        urldict.update({th[item].text:td[item].text})

    data.append(urldict)

Определите столбцы, которые вы хотите использовать в качестве заголовка в файле csv.

cols = []
for d in range(0,len(data)):
    for i in data[d].keys():
        if i not in cols:
            cols.insert(len(cols),i)

Затем сохраните список словаря в файл csv.

with open('file_url.csv', 'w') as output_file:
    dict_writer = csv.DictWriter(output_file, cols)
    dict_writer.writeheader()
    dict_writer.writerows(data)
0 голосов
/ 06 марта 2019

Поскольку у вас есть 500 URL-адресов, вы можете просто сохранить его в файл.Затем вы можете прочитать строки в список и использовать read_html () для каждого, чтобы получить список данных.Получите второй столбец первого кадра данных в список и используйте модуль csv, чтобы записать его в файл.

import pandas as pd
import csv
url_list=[]
with open('file.csv','w') as csvfile, open('urls.txt','r') as urlfile:
    writer = csv.writer(csvfile, delimiter=',', quotechar='"')
    #Write the headers
    writer.writerow(['State','City','Country','Callsign','Network Affiliation'])
    #Read urls into a list
    urls=urlfile.readlines()
    for url in urls:
        dfs = pd.read_html(url.strip())
        #convert second column of 1st dataframe to a list and write to csv file
        writer.writerow(list(dfs[0][1])[:-1])

urls.txt

https://nocable.org/browse-stations/callsign/cadenatres-linares-nl
https://nocable.org/browse-stations/callsign/k27hm-d-quanah-tx

file.csv

State,City,Country,Callsign,Network Affiliation
Newfoundland and Labrador,AGUALEGUAS,USA,CADENATRES,INDEPENDENT
Texas,QUANAH,USA,27,K27HM-D,INDEPENDENT

Возможно, вы захотите добавить случайную задержку при использовании read_html для каждого URL.Кроме того, если вы хотите сделать это частями, скажем, 50 URL-адресов и т. Д., Не забудьте изменить режим записи на «a» с «w» и удалить код, который записывает заголовки со второго раза.

...