对于一般的编码我还是很陌生的。我知道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()
答案 0 :(得分:0)
由于您有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
您可能需要考虑在每个URL上使用read_html时增加一些随机延迟。另外,如果您想以50个网址等块的形式执行此操作,则不要忘记将写入模式从“ w”更改为“ a”,并删除第二次写入标头的代码。
答案 1 :(得分:0)
您可以使用词典列表。
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)