心血來潮去爬了一下深交所的部分?jǐn)?shù)據(jù)(http://www.szse.cn/main/disclosure/jgxxgk/djggfbd/)
在爬的過程中發(fā)現(xiàn)弱卡,該網(wǎng)頁跳轉(zhuǎn)頁碼,但網(wǎng)址卻一直不變汞幢,通過查看網(wǎng)頁的post數(shù)據(jù)儡湾,發(fā)現(xiàn)有個控制頁碼的項
Paste_Image.png
只要修改該項的值再post給網(wǎng)頁就能實現(xiàn)頁碼的跳轉(zhuǎn)眼溶,在網(wǎng)上查找具體方法后授药,改寫了代碼,能實現(xiàn)爬取任意頁碼的數(shù)據(jù)了
我的代碼
# -*- coding:utf-8 -*-
import urllib.request, urllib.parse
from bs4 import BeautifulSoup
import time
def get_info(start=1,end=1):
info = {} #儲存目標(biāo)數(shù)據(jù)
url = 'http://www.szse.cn/main/disclosure/jgxxgk/djggfbd/' #目標(biāo)鏈接
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.106 Safari/537.36',
}
#爬取所選取頁數(shù)區(qū)間數(shù)據(jù)凹嘲,該網(wǎng)頁跳轉(zhuǎn)頁碼师倔,網(wǎng)址不變
# 通過分析,post的數(shù)據(jù)中'tab1PAGENUM'是用來控制頁碼的周蹭,通過改變該鍵的值趋艘,來實現(xiàn)頁碼跳轉(zhuǎn)
for i in range(start,end+1):
post_data = urllib.parse.urlencode({'tab1PAGENUM': i}).encode(encoding='UTF8') #需post的數(shù)據(jù)
#req = urllib.request.Request(url, headers=headers)
res = urllib.request.urlopen(url, post_data) #為data參數(shù)賦值
time.sleep(2) #防止訪問太頻繁
soup = BeautifulSoup(res, 'lxml')
titles = soup.find_all('td', class_='cls-data-th') #標(biāo)題行
datas = soup.find_all('td', class_='cls-data-td') #數(shù)據(jù)行
num = int(len(datas) / len(titles)) #數(shù)據(jù)行數(shù)
#將數(shù)據(jù)寫入本地文件
with open('/Users/zorro/Desktop/test1.txt', 'a') as fs:
for j in range(num):
for title, data in zip(titles, datas[12 * j:12 * (j + 1)]):
info[title.get_text()] = data.get_text()
s = str(info)
fs.writelines(s)
fs.writelines('\n')
print('Done!')
get_info(1,100) #爬取前一百頁數(shù)據(jù)
總結(jié)
1.爬取過程不是很難,該網(wǎng)頁無需用到headers即可爬刃桌省瓷胧;
2.遇到的問題是頁碼變動但網(wǎng)址不變動,只要找到控制頁碼變動的項棚愤,把該值post給網(wǎng)頁就能實現(xiàn)了搓萧;
3.問題解決過程中,查找了很多資料,也學(xué)到了很多瘸洛,攻克每一個新遇到的問題揍移,就是對自己的一次肯定,能提高自信货矮,也能提高學(xué)習(xí)興趣。