你看到的语法错误是因为你没有包围的XPath字符串到报价,解决它:
winner = tree.xpath('//*[@id="eventView0"]/div[3]/table/tbody/tr[1]/td[7]')
的实际问题是表的内容是动态,通过形成在浏览器中执行的JavaScript。你可以做的是通过json.loads()
解析script
标签具有JSON对象中所需的数据,提取JSON字符串,并将其加载到Python数据结构:
import json
import re
from lxml import html
import requests
page = requests.get('https://www.pathofexile.com/forum/view-thread/1703834')
tree = html.fromstring(page.content)
script = tree.xpath('//script[contains(., "var json")]/text()')[0]
obj_string = re.search(r"var json = (\{.*?\}),$", script, re.MULTILINE).group(1)
obj = json.loads(obj_string)
# print entries
entries = obj['ladder']['entries']
for entry in entries:
print(entry['account']['name'])
打印账户名(就像一个证明它正在工作):
Havoc6
Steelmage
Olecgolec
...
Anafobia
nokieka2
HoGji
什么具体是你遇到的问题/错误?换句话说,你预期的结果是什么,你得到的结果是什么? – rdgd
我得到的具体一个是: winner = tree.xpath(// * [@ id =“eventView0”]/div [3]/table/tbody/tr [1]/td [7]) ^ 语法错误:无效语法 但是我甚至不确定我是否正确地解决了这个问题。 –