很抱歉这个愚蠢的问题,因为我是Web抓取的新手,并且不了解HTML等。
我正在尝试从此网站上抓取数据。具体而言,从页面的此部分/表:
末"四"位数 9775,2275,4775,7275 末"五"位数 03881,23881,43881,63881,83881,16913,66913 末"六"位数 313110,563110,813110,063110 末"七"位数 4210962,9210962,9785582 末"八"位数 63262036 末"九"位数 080876872
对不起,那是中文,因为我无法嵌入图片,所以它看起来很糟糕。但是,该表大约位于页面的中间(距顶部40%)。表格ID为'tr_zqh'
。
这是我的源代码:
import bs4 as bs
import urllib.request
def scrapezqh(url):
source = urllib.request.urlopen(url).read()
page = bs.BeautifulSoup(source, 'html.parser')
print(page)
url = 'http://data.eastmoney.com/xg/xg/detail/300741.html?tr_zqh=1'
print(scrapezqh(url))
它会刮除大部分表格,但会刮除我感兴趣的部分。这是返回值的一部分,我认为数据应该是:
<td class="tdcolor">网下有效申购股数(万股)
</td>
<td class="tdwidth" id="td_wxyxsggs">
</td>
</tr>
<tr id="tr_zqh">
<td class="tdtitle" id="td_zqhrowspan">中签号
</td>
<td class="tdcolor">中签号公布日期
</td>
<td class="ltxt" colspan="3"> 2018-02-22 (周四)
</td>
我想获取此表的内容:(tr id="tr_zqh"
上面的第六行)。但是由于某种原因,它不会抓取数据(下面没有内容)。但是,当我检查网页的源代码时,数据在表中。我认为这不是BeautifulSoup4无法处理的动态表。我已经尝试过lxml
和html解析器,并且我已经尝试过pandas.read_html
。它返回了相同的结果。我想获得一些帮助,以了解为什么它无法获取数据以及如何修复它。非常感谢!
忘记提及我尝试过了page.find('tr')
,它返回了表的一部分,但没有返回我感兴趣的行。Page.find('tr')
返回屏幕快照的第一行。我想获取第二行和第三行的数据(在屏幕截图中突出显示)
如果您从初始页面提取了几个变量,则可以使用它们直接向api发出请求。然后,您将获得可用于获取数据的json对象。
import requests
import re
import json
from pprint import pprint
s = requests.session()
r = s.get('http://data.eastmoney.com/xg/xg/detail/300741.html?tr_zqh=1')
gdpm = re.search('var gpdm = \'(.*)\'', r.text).group(1)
token = re.search('http://dcfm.eastmoney.com/em_mutisvcexpandinterface/api/js/get\?type=XGSG_ZQH&token=(.*)&st=', r.text).group(1)
url = "http://dcfm.eastmoney.com/em_mutisvcexpandinterface/api/js/get?type=XGSG_ZQH&token=" + token + "&st=LASTFIGURETYPE&sr=1&filter=%28securitycode='" + gdpm + "'%29&js=var%20zqh=%28x%29"
r = s.get(url)
j = json.loads(r.text[8:])
for i in range (len(j)):
print ( j[i]['LOTNUM'])
#pprint(j)
输出:
9775,2275,4775,7275
03881,23881,43881,63881,83881,16913,66913
313110,563110,813110,063110
4210962,9210962,9785582
63262036
080876872
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句