Python填写表格并下载生成的CSV文件

时间:2018-08-12 22:52:52

标签: python-3.x url beautifulsoup python-requests export-to-csv

我是Python的新手,我一直在为新项目而苦苦挣扎。我一直在到处寻找解决方案,但是我想我实际上并没有理解这里存在的问题。因此,我会尽量保持清楚。

项目:

URL:https://www.classement.atout-france.fr/hebergements-classes

我想从上面的网站(URL)填写表格,输入特定的邮政编码(“邮政编码”),提交表格,最后下载生成的CSV文件。

Page and CSV file generated

我能够用Requests正确填写表格,并以文本形式获取生成的页面的HTML。但是,当我尝试下载并单击与CSV文件相关的链接时,我得到了一个新页面,其中包含以下消息:“找不到所需的资源”

链接到CSV文件= https://www.classement.atout-france.fr/fr/classement/?wicket:interface=:1:hebergements:lien_export::IResourceListener ::

CSV URL location

我真的不明白为什么该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)

0 个答案:

没有答案