网页地址如https://www.phsciencedata.cn/Share/frameset?__report=ReportZoneYear.rptdesign&years=2018&diseaseId=322
如何使用urllib.request或Selenium等等工具得到其中表格内容,求解决思路
注:我用request和Selenium获取到的都是页面源代码,没有成功获取到表格数据
主要有的大多数是你抓取的页面上是JS动态加载出来的数据,比如有的需要下拉拖一下才能加载出来更多的数据,这时你需要借助对浏览器的辅助:
import selenium
from selenium import webdriver
from selenium.common.exceptions import NoSuchElementException
from selenium.webdriver.common.keys import Keys
import time
browser = webdriver.Firefox() # Get local session of firefox
browser.get("http://news.sina.com.cn/c/2013-07-11/175827642839.shtml ") # Load page
time.sleep(5) # Let the page load
try:
element = browser.find_element_by_xpath("//span[contains(@class,'f_red')]") # get element on page
print element.text # get element text
except NoSuchElementException:
assert 0, "can't find f_red"
browser.close()
真正请求的url是这里
import requests
import pandas as pd
def API_getData(url,body,selector={'type':'player','order_type':'KDA'}):
"""
Players Data--->selector={'type':'player','order_type':'KDA'} default,
Heros Data--->selector={'type':'hero','order_type':'APPEAR'}
Teams Data--->selector={'type':'team','order_type':'KDA'}
"""
## selector
body['type'],body['order_type']=selector['type'],selector['order_type']
##count rows
req=requests.post(url=url,data=body).json()
count=int(req['data']['data']['count'])
onePageCount=len(req['data']['data']['list'])
lis=[]
for i in range(1,count//onePageCount+1):
body['page']=i
req=requests.post(url=url,data=body).json()
if req['data']['data']['list']!=[]:
lis+=req['data']['data']['list']
else:break
##
cols=lis[0].keys()
ansData=pd.DataFrame(lis,columns=cols)
if selector['type']=='hero':
ansData=ansData[ansData['position_name']!='']
return ansData
url='你的网址.php'
body={
'api_path': '你的储存路径.php',
'method': 'post',
'platform': 'web',
'api_version': '9.9.9',
'language_id': '1',
'tournament_id': '191',
'type': 'hero',
'order_type': 'APPEAR',
'order_value': 'DESC',
'team_name': '',
'player_name': '',
'positionID': '',
'page': '1',
}
#
API_getData(url,body,selector={'type':'player','order_type':'KDA'})
seleuim可以载入网页后等待几秒,让他加载数据。
表格可视化工具 可以用 matplotlib试试
抓的时候网页这个请求还没执行完
requests可以请求成功的