我是Python的新手,我一直在为新项目而苦苦挣扎。我一直在到处寻找解决方案,但是我想我实际上并没有理解这里存在的问题。因此,我会尽量保持清楚。
项目:
URL:https://www.classement.atout-france.fr/hebergements-classes
我想从上面的网站(URL)填写表格,输入特定的邮政编码(“邮政编码”),提交表格,最后下载生成的CSV文件。
我能够用Requests正确填写表格,并以文本形式获取生成的页面的HTML。但是,当我尝试下载并单击与CSV文件相关的链接时,我得到了一个新页面,其中包含以下消息:“找不到所需的资源”
链接到CSV文件= https://www.classement.atout-france.fr/fr/classement/?wicket:interface=:1:hebergements:lien_export::IResourceListener ::
我真的不明白为什么该URL不允许您下载文件。 这是我的代码:
import csv
import requests
import urllib.parse
from bs4 import BeautifulSoup
URL = 'https://www.classement.atout-france.fr/hebergements-classes'
global code_postal
code_postal = 75005
s = requests.Session()
def fetch(url, data=None):
if data is None:
return s.get(url).content
else:
return s.post(url, data=data).content
soup = BeautifulSoup(fetch(URL), features = "html.parser")
form = soup.find('form')
fields = form.findAll('input')
formdata = dict( (field.get('name'), field.get('value')) for field in
fields)
formdata['codePostal'] = code_postal
print(formdata)
posturl = urllib.parse.urljoin(URL, form['action'])
print(posturl)
r = s.post(posturl, data=formdata)
soup_form = BeautifulSoup(r.content, features = "html.parser")
with soup_form.find('a', attrs={'class': 'exportCsv'}) as link:
for link in item.find_all('a'):
CSV_URL = link.get('href')
print(CSV_URL)
download = s.get(CSV_URL)
decoded_content = download.content.decode('utf-8')
cr = csv.reader(decoded_content.splitlines(), delimiter=',')
my_list = list(cr)
for row in my_list:
print(row)