我想从以下网站上使用相同的 html 标签从多个页面抓取多个下载按钮:
https://data.jakarta.go.id/dataset/indeks-standar-pencemaran-udara-ispu-tahun-2011 https://data.jakarta.go.id/dataset/indeks-standar-pencemaran-udara-ispu-tahun-2012 https://data.jakarta.go.id/dataset/indeks-standar-pencemaran-udara-ispu-tahun-2013
我曾尝试使用多线程进行网页抓取,但没有奏效。我的代码是这样的
import requests
import threading
from bs4 import BeautifulSoup as bs
import os
URLS = [
'https://data.jakarta.go.id/dataset/indeks-standar-pencemaran-udara-ispu-tahun-2011',
'https://data.jakarta.go.id/dataset/indeks-standar-pencemaran-udara-ispu-tahun-2012',
'https://data.jakarta.go.id/dataset/indeks-standar-pencemaran-udara-ispu-tahun-2013',
]
def downloadPage(url, folder):
os.mkdir(folder) # create folder
download_urls = []
filetype = '.csv'
def get_soup(url):
return bs(requests.get(url).text, 'html.parser')
for link in get_soup(url).find_all('a'):
file_link = link.get('href')
if filetype in file_link:
#print(file_link)
download_urls.append(file_link)
for file in download_urls: # for each index and file in download_urls
fileName = file.split('/')[-1] # the text after the last / is the file name we want
fileRequest = requests.get(file) # download the file
with open(os.path.join(folder, fileName), 'wb') as examFile: # open a new file in write and binary mode
examFile.write(fileRequest.content) # write the content of the downloaded file
for URL in URLS:
folderName = URL.split('/')[-1] # the name of the folder
processThread = threading.Thread(
target=downloadPage, args=(URL, folderName)) # parameters and functions have to be passed separately
processThread.start() # start the thread
'''
它返回: NameError: 名称“文件夹”未定义
答案 0 :(得分:0)
出现第 30 行的错误是因为您从未使用命名文件夹创建全局变量。只需在导入下的某处包含以下行。
url = URLS[0] # select first url
folder = '.' # select working directory as folder
答案 1 :(得分:0)
要从 3 个 URL 下载所有 CSV,您可以使用以下示例:
import os
import requests
from bs4 import BeautifulSoup
URLS = [
"https://data.jakarta.go.id/dataset/indeks-standar-pencemaran-udara-ispu-tahun-2011",
"https://data.jakarta.go.id/dataset/indeks-standar-pencemaran-udara-ispu-tahun-2012",
"https://data.jakarta.go.id/dataset/indeks-standar-pencemaran-udara-ispu-tahun-2013",
]
for url in URLS:
soup = BeautifulSoup(requests.get(url).content, "html.parser")
folder = url.split("/")[-1]
os.makedirs(folder, exist_ok=True)
for a in soup.select('a[href$=".csv"]'):
file_name = a["href"].split("/")[-1]
print(
"Downloading {} ...".format(os.path.join(folder, file_name)),
end=" ",
)
with open(os.path.join(folder, file_name), "wb") as f_out:
f_out.write(requests.get(a["href"]).content)
print("OK.")
将 CSV 文件下载到 3 个文件夹中:
indeks-standar-pencemaran-udara-ispu-tahun-2011
├── Indeks-Standar-Pencemar-Udara-di-Provinsi-DKI-Jakarta-Bulan-Agustus-Tahun-2011.csv
├── Indeks-Standar-Pencemar-Udara-di-Provinsi-DKI-Jakarta-Bulan-April-Tahun-2011.csv
├── Indeks-Standar-Pencemar-Udara-di-Provinsi-DKI-Jakarta-Bulan-Desember-Tahun-2011.csv
├── Indeks-Standar-Pencemar-Udara-di-Provinsi-DKI-Jakarta-Bulan-Februari-Tahun-2011.csv
├── Indeks-Standar-Pencemar-Udara-di-Provinsi-DKI-Jakarta-Bulan-Januari-Tahun-2011.csv
├── Indeks-Standar-Pencemar-Udara-di-Provinsi-DKI-Jakarta-Bulan-Juli-Tahun-2011.csv
├── Indeks-Standar-Pencemar-Udara-di-Provinsi-DKI-Jakarta-Bulan-Juni-Tahun-2011.csv
├── Indeks-Standar-Pencemar-Udara-di-Provinsi-DKI-Jakarta-Bulan-Maret-Tahun-2011.csv
├── Indeks-Standar-Pencemar-Udara-di-Provinsi-DKI-Jakarta-Bulan-Mei-Tahun-2011.csv
├── Indeks-Standar-Pencemar-Udara-di-Provinsi-DKI-Jakarta-Bulan-November-Tahun-2011.csv
├── Indeks-Standar-Pencemar-Udara-di-Provinsi-DKI-Jakarta-Bulan-Oktober-Tahun-2011.csv
├── Indeks-Standar-Pencemar-Udara-di-Provinsi-DKI-Jakarta-Bulan-September-Tahun-2011.csv
├── Indeks-Standar-Pencemar-Udara-di-SPKU-Bulan-Agustus-Tahun-2011.csv
├── Indeks-Standar-Pencemar-Udara-di-SPKU-Bulan-April-Tahun-2011.csv
├── Indeks-Standar-Pencemar-Udara-di-SPKU-Bulan-Desember-Tahun-2011.csv
├── Indeks-Standar-Pencemar-Udara-di-SPKU-Bulan-Februari-Tahun-2011.csv
├── Indeks-Standar-Pencemar-Udara-di-SPKU-Bulan-Januari-Tahun-2011.csv
├── Indeks-Standar-Pencemar-Udara-di-SPKU-Bulan-Juli-Tahun-2011.csv
├── Indeks-Standar-Pencemar-Udara-di-SPKU-Bulan-Juni-Tahun-2011.csv
├── Indeks-Standar-Pencemar-Udara-di-SPKU-Bulan-Maret-Tahun-2011.csv
├── Indeks-Standar-Pencemar-Udara-di-SPKU-Bulan-Mei-Tahun-2011.csv
├── Indeks-Standar-Pencemar-Udara-di-SPKU-Bulan-November-Tahun-2011.csv
├── Indeks-Standar-Pencemar-Udara-di-SPKU-Bulan-Oktober-Tahun-2011.csv
└── Indeks-Standar-Pencemar-Udara-di-SPKU-Bulan-September-Tahun-2011.csv
indeks-standar-pencemaran-udara-ispu-tahun-2012
├── Indeks-Standar-Pencemar-Udara-di-Provinsi-DKI-Jakarta-Bulan-Agustus-Tahun-2012.csv
├── Indeks-Standar-Pencemar-Udara-di-Provinsi-DKI-Jakarta-Bulan-April-Tahun-2012.csv
├── Indeks-Standar-Pencemar-Udara-di-Provinsi-DKI-Jakarta-Bulan-Desember-Tahun-2012.csv
├── Indeks-Standar-Pencemar-Udara-di-Provinsi-DKI-Jakarta-Bulan-Februari-Tahun-2012.csv
├── Indeks-Standar-Pencemar-Udara-di-Provinsi-DKI-Jakarta-Bulan-Januari-Tahun-2012.csv
├── Indeks-Standar-Pencemar-Udara-di-Provinsi-DKI-Jakarta-Bulan-Juli-Tahun-2012.csv
├── Indeks-Standar-Pencemar-Udara-di-Provinsi-DKI-Jakarta-Bulan-Juni-Tahun-2012.csv
├── Indeks-Standar-Pencemar-Udara-di-Provinsi-DKI-Jakarta-Bulan-Maret-Tahun-2012.csv
├── Indeks-Standar-Pencemar-Udara-di-Provinsi-DKI-Jakarta-Bulan-Mei-Tahun-2012.csv
├── Indeks-Standar-Pencemar-Udara-di-Provinsi-DKI-Jakarta-Bulan-November-Tahun-2012.csv
├── Indeks-Standar-Pencemar-Udara-di-Provinsi-DKI-Jakarta-Bulan-Oktober-Tahun-2012.csv
├── Indeks-Standar-Pencemar-Udara-di-Provinsi-DKI-Jakarta-Bulan-September-Tahun-2012.csv
├── Indeks-Standar-Pencemar-Udara-di-SPKU-Bulan-Agustus-Tahun-2012.csv
├── Indeks-Standar-Pencemar-Udara-di-SPKU-Bulan-April-Tahun-2012.csv
├── Indeks-Standar-Pencemar-Udara-di-SPKU-Bulan-Desember-Tahun-2012.csv
├── Indeks-Standar-Pencemar-Udara-di-SPKU-Bulan-Februari-Tahun-2012.csv
├── Indeks-Standar-Pencemar-Udara-di-SPKU-Bulan-Januari-Tahun-2012.csv
├── Indeks-Standar-Pencemar-Udara-di-SPKU-Bulan-Juli-Tahun-2012.csv
├── Indeks-Standar-Pencemar-Udara-di-SPKU-Bulan-Juni-Tahun-2012.csv
├── Indeks-Standar-Pencemar-Udara-di-SPKU-Bulan-Maret-Tahun-2012.csv
├── Indeks-Standar-Pencemar-Udara-di-SPKU-Bulan-Mei-Tahun-2012.csv
├── Indeks-Standar-Pencemar-Udara-di-SPKU-Bulan-November-Tahun-2012.csv
├── Indeks-Standar-Pencemar-Udara-di-SPKU-Bulan-Oktober-Tahun-2012.csv
└── Indeks-Standar-Pencemar-Udara-di-SPKU-Bulan-September-Tahun-2012.csv
indeks-standar-pencemaran-udara-ispu-tahun-2013
├── Indeks-Standar-Pencemar-Udara-di-Provinsi-DKI-Jakarta-Bulan-Agustus-Tahun-2013.csv
├── Indeks-Standar-Pencemar-Udara-di-Provinsi-DKI-Jakarta-Bulan-April-Tahun-2013.csv
├── Indeks-Standar-Pencemar-Udara-di-Provinsi-DKI-Jakarta-Bulan-Desember-Tahun-2013.csv
├── Indeks-Standar-Pencemar-Udara-di-Provinsi-DKI-Jakarta-Bulan-Februari-Tahun-2013.csv
├── Indeks-Standar-Pencemar-Udara-di-Provinsi-DKI-Jakarta-Bulan-Januari-Tahun-2013.csv
├── Indeks-Standar-Pencemar-Udara-di-Provinsi-DKI-Jakarta-Bulan-Juli-Tahun-2013.csv
├── Indeks-Standar-Pencemar-Udara-di-Provinsi-DKI-Jakarta-Bulan-Juni-Tahun-2013.csv
├── Indeks-Standar-Pencemar-Udara-di-Provinsi-DKI-Jakarta-Bulan-Maret-Tahun-2013.csv
├── Indeks-Standar-Pencemar-Udara-di-Provinsi-DKI-Jakarta-Bulan-Mei-Tahun-2013.csv
├── Indeks-Standar-Pencemar-Udara-di-Provinsi-DKI-Jakarta-Bulan-November-Tahun-2013.csv
├── Indeks-Standar-Pencemar-Udara-di-Provinsi-DKI-Jakarta-Bulan-Oktober-Tahun-2013.csv
├── Indeks-Standar-Pencemar-Udara-di-Provinsi-DKI-Jakarta-Bulan-September-Tahun-2013.csv
├── Indeks-Standar-Pencemar-Udara-di-SPKU-Bulan-Agustus-Tahun-2013.csv
├── Indeks-Standar-Pencemar-Udara-di-SPKU-Bulan-April-Tahun-2013.csv
├── Indeks-Standar-Pencemar-Udara-di-SPKU-Bulan-Desember-Tahun-2013.csv
├── Indeks-Standar-Pencemar-Udara-di-SPKU-Bulan-Februari-Tahun-2013.csv
├── Indeks-Standar-Pencemar-Udara-di-SPKU-Bulan-Januari-Tahun-2013.csv
├── Indeks-Standar-Pencemar-Udara-di-SPKU-Bulan-Juli-Tahun-2013.csv
├── Indeks-Standar-Pencemar-Udara-di-SPKU-Bulan-Juni-Tahun-2013.csv
├── Indeks-Standar-Pencemar-Udara-di-SPKU-Bulan-Maret-Tahun-2013.csv
├── Indeks-Standar-Pencemar-Udara-di-SPKU-Bulan-Mei-Tahun-2013.csv
├── Indeks-Standar-Pencemar-Udara-di-SPKU-Bulan-November-Tahun-2013.csv
├── Indeks-Standar-Pencemar-Udara-di-SPKU-Bulan-Oktober-Tahun-2013.csv
└── Indeks-Standar-Pencemar-Udara-di-SPKU-Bulan-September-Tahun-2013.csv
0 directories, 72 files