这个网页有40行数据
http://vip.stock.finance.sina.com.cn/q/go.php/vFinanceAnalyze/kind/profit/index.phtml?s_i=&s_a=&s_c=&reportdate=2021&quarter=4&p=3
我抓取这个网页
def get_rows(page):
import urllib.request
import lxml.html
url = "http://vip.stock.finance.sina.com.cn/q/go.php/vFinanceAnalyze/kind/profit/"\
"index.phtml?s_i=&s_a=&s_c=&reportdate=2021&quarter=4&p={}".format(page)
table_xpath = '//*[@id="dataTable"]'
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:23.0) Gecko/20100101 Firefox/23.0'}
req = urllib.request.Request(url=url, headers=headers)
data_string=urllib.request.urlopen(req).read()
root=lxml.html.fromstring(data_string)
dtable = root.xpath(table_xpath)[0]
rows = dtable.xpath('.//tr')
print(len(rows))
奇葩的是url的p=3修改成p=2或其他,得到41这个数(第一行是行头 1+40=41)!!!
http://vip.stock.finance.sina.com.cn/q/go.php/vFinanceAnalyze/kind/profit/index.phtml?s_i=&s_a=&s_c=&reportdate=2021&quarter=4&p=2
为何第三页的数据不能全部获得?网站反爬了吗?
get_rows(page=1)
41
get_rows(page=2)
41
get_rows(page=3)
26
get_rows(page=4)
41
你拿的是
thead
中的tr
值, 你没发现这个tr
是隐藏的吗?这个隐藏的部分应该是适配了移动端的数据并且你应该拿
tbody
中的tr
, 所以dtable.xpath('.//tr')
写的不对, 应该定位tbody
下面的tr