大家好,小弟刚接触python几天...
有个资料查询的问题一直无法解决
(http://amis.afa.gov.tw/m_coop/CoopVegFullMarketMainProd.aspx )
该网站查询的资料结果是url不变并以js呈现(请见谅非本科系的形容@@")
且结果若超过60笔,才会出现下一页的按钮可以点选
所以碰到的问题是在显示资料之前
第2、3页...下一页的按钮不会出现
而按钮的方式是以javascripl:__doPostBack的方式写入
因此问题有两个:
1.我该如何才能获得第1页之后的资料
目前查到的方法好像要利用requests.session方法
但是怎么写都跑不出来
2.有办法可以在查询后,直接利用"下载"这个按钮下载资料吗
爬文后不知道能否利用request后,再配合selenium
只是找到的文章大多是利用cookie带入,好像不适合这个网页
不知道是否有善心版友可以协助指导新手...
以下附上查询的code跟试着加入session的code
单纯查询一次性资料:
# -*- coding: utf-8 -*-
import requests
from bs4 import BeautifulSoup
import pandas as pd
resp =
requests.get('http://amis.afa.gov.tw/m_coop/CoopVegFullMarketMainProd.aspx')
soup = BeautifulSoup(resp.text, 'html5lib')
view_state = soup.find(id='__VIEWSTATE')['value']
event_validation = soup.find(id='__EVENTVALIDATION')['value']
viewstate_generator = soup.find(id='__VIEWSTATEGENERATOR')['value']
form_data = {
'__VIEWSTATE': view_state,
'__VIEWSTATEGENERATOR': viewstate_generator,
'__EVENTVALIDATION': event_validation,
'ctl00$contentPlaceHolder$txtStartDate':'106/12/01',
'ctl00$contentPlaceHolder$txtEndDate':'107/03/15',
'ctl00$contentPlaceHolder$ucCoopVegFruitMarket$radlMarketRange':'P',
'ctl00$contentPlaceHolder$ucCoopVegFruitMarket$lstMarket':'109',
'ctl00$contentPlaceHolder$ucCoopVegFruitMainProduct$radlProductType':'V',
'ctl00$contentPlaceHolder$ucCoopVegFruitMainProduct$lstProduct':'FA0',
'ctl00$contentPlaceHolder$dropProductClass':'1',
'ctl00$contentPlaceHolder$btnQuery':'查询'
}
resp =
requests.post('http://amis.afa.gov.tw/m_coop/CoopVegFullMarketMainProd.aspx',
data=form_data)
df = pd.read_html(resp.text)[6].dropna(axis=0, how='any')
print(df)