網站地址:http://ec.mcc.com.cn/b2b/web/two/indexinfoAction.do?actionType=showMoreCgxx&xxposition=cgxxhtml
原本覺得這是個老老實實的get請求,誰知道在翻頁的時候發現提交請求的方式是post,python
好在首頁用get方式能夠輕鬆獲取到html源碼,沒有像以前的東方電氣那麼煩人。web
在這裏採用了簡單的post提交方式,所以觀察翻頁便可發現,頁面的改變和FormData有關post
經過更改formdata中的currpage便可實現翻頁提交。網站
使用post方式時,數據放在data或者body中,不能放在url中,放在url中將被忽略。編碼
urllib2用一個Request對象來映射所提出的HTTP請求。url
經過請求的地址建立一個Request對象,code
經過調用urlopen並傳入Request對象,將返回一個相關請求response對象,orm
這個應答對象如同一個文件對象,因此要在Response中調用.read()htm
def get_one_page(url,data): try: headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.84 Safari/537.36' } #將傳過來的data進行編碼,變成bytes格式的數據 dataEncode = urllib.parse.urlencode(data).encode('utf-8') #獲取網頁響應內容,用到了urllib模塊 request = urllib.request.Request(url=url, headers=headers,data=dataEncode) response = urllib.request.urlopen(request) #獲取應答對象 return response.read().decode('utf-8') except RequestException: return None
主方法中構造data
def main(): url = "http://ec.mcc.com.cn/b2b/web/two/indexinfoAction.do?actionType=showMoreCgxx&xxposition=cgxx" #構造post表單所提交的數據 data = { 'currpage': 1, 'xxposition': 'cgxx' } html = get_one_page(url,data) print(html)
接下來能夠經過循環構造最大頁數,並將最大頁傳給data,循環獲取每一頁的內容便可。
#直接修改data的value值便可 for i in range(2,page_num+1): data['currpage'] = i