今天寫了一個簡單的爬蟲程式,為了爬取kfc
官網的餐廳資料,程式碼如下
# ajax的post請求--肯德基官網
def create_request(page):
url='http://www.kfc.com.cn/kfccda/ashx/GetStoreList.ashx'
data={
'cname':'濮陽',
'pid':'',
'pageIndex':page,
'pageSize':10
}
new_data=urllib.parse.urlencode(data).encode('utf-8')
headers={
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:128.0) Gecko/20100101 Firefox/128.0'
}
# post方式不能直接拼接,要在請求物件定製的方法中加入該引數
request=urllib.request.Request(url=url,headers=headers,data=new_data)
return request
def get_content(request):
response=urllib.request.urlopen(request)
content=response.read().decode('utf-8')
return content
def load_content(page,content):
with open('kendeji'+str(page)+'.json','w',encoding='utf-8') as fp:
fp.write(content)
if __name__=='__main__':
start_page=int(input('請輸入起始頁碼'))
end_page=int(input('請輸入終止頁碼'))
for page in range(start_page,end_page):
request=create_request(page)
content=get_content(request)
print(f"頁面 {page} 的內容: {content}")
# load_content(page,content)
結果如下圖:
原因如下:
1.URL中的引數沒有複製全
我的URL:
url='http://www.kfc.com.cn/kfccda/ashx/GetStoreList.ashx'
正確的URL:
url='http://www.kfc.com.cn/kfccda/ashx/GetStoreList.ashx?op=cname'
修改後的程式碼執行結果如下: