我正在努力在HTML代码上使用XPath来查找所需的信息。
我尝试了几次查询,但是它们一直在python中返回空列表。所以我安装了一个chrome插件来检查我的查询是否错误,事实证明它们不是错误的,所以我现在完全感到困惑。我的整体方法是错误的还是在这里遗漏了什么?
import requests
from lxml import html
#specify the url
base_url = 'https://www.lolesports.com/en_US/na-
lcs/na_2018_summer/schedule/regular_season/2'
#query the website and return the html to the variable ‘html_code’
html_code = requests.get(base_url)
tree = html.fromstring(html_code.content)
my_nodes = tree.xpath('//a[@id="ember9461"]') ## here it keeps returning an empty list
尝试了几个都不起作用的查询,除了不能进一步解析的宽通配符“ //*”。
我想为一周中的每个游戏解析href中提供的链接(例如)'a id =“ ember9461” ....... / a'。因此,最好返回一个包含所有这些链接或至少包含链接的内容的列表,以便我进一步解析。但是,正如我之前说的,尽管从Chrome的XPath插件显示的正确的XPath,我仍然得到一个空数组。
感谢您的帮助。谢谢!
这是我的第一个问题,如果我知道如何:),我将返回添加屏幕截图
编辑:要求输出:好吧,我没有收到错误,只是描述了“ my_nodes”的空列表。我正在使用PyCharm 8.13。
my_nodes = {list}<class 'list'>: []
由于查询正在使用XPath插件,因此我什么都希望,但列表为空。
以下是说明问题的屏幕截图:
答案 0 :(得分:0)
还有你的圣诞快乐:)
据我所知,您的语法正确,并且实际上返回了一些内容。问题是,它不会返回可以用您的XPath查询(请检查html_content)进行解析以供自己查看的内容。这解释了为什么它返回一个空列表。
希望这会有所帮助。
答案 1 :(得分:0)
我认为您可能需要像selenium这样的方法,您可以在其中滚动以生成所有链接并留出时间来展示它们
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from bs4 import BeautifulSoup as bs
from urllib.parse import urljoin
base = 'https://www.lolesports.com'
url = 'https://www.lolesports.com/en_US/na-lcs/na_2018_summer/schedule/regular_season/1'
d = webdriver.Chrome()
d.get(url)
WebDriverWait(d, 20).until(EC.invisibility_of_element_located((By.CSS_SELECTOR, ".throbber-loader")))
copyright = WebDriverWait(d, 20).until(EC.visibility_of_element_located((By.CSS_SELECTOR, ".copyright-text")))
d.execute_script("return arguments[0].scrollIntoView(true);", copyright)
WebDriverWait(d,5).until(EC.presence_of_all_elements_located((By.CSS_SELECTOR, '.ember-view')))
soup = bs(d.page_source,'lxml')
links = [urljoin(base,link.get('href')) for link in soup.select('.ember-view') if link.get('href')]
print(len(links))
print(links)
d.quit()
仅硒:
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from urllib.parse import urljoin
base = 'https://www.lolesports.com'
url = 'https://www.lolesports.com/en_US/na-lcs/na_2018_summer/schedule/regular_season/1'
d = webdriver.Chrome()
d.get(url)
WebDriverWait(d, 20).until(EC.invisibility_of_element_located((By.CSS_SELECTOR, ".throbber-loader")))
copyright = WebDriverWait(d, 20).until(EC.visibility_of_element_located((By.CSS_SELECTOR, ".copyright-text")))
d.execute_script("return arguments[0].scrollIntoView(true);", copyright)
elems = WebDriverWait(d,5).until(EC.presence_of_all_elements_located((By.CSS_SELECTOR, '.ember-view[href]')))
links = []
for elem in elems:
links.append(urljoin(base,elem.get_attribute('href')))
print(len(links))
print(links)
d.quit()