我正在使用selenium和BeautifulSoup从维基百科页面创建一些列表。当我查看页面源时,我想要从中获取信息的链接总是如下:
<li><a href="/wiki/town_name,_California" title="town_name, California">town_name, state</a></li>
标签中有一个链接,您可以点击该链接,指引您进入该城镇的维基页面。它总是/wiki/town_name,_California
我想在Python中使用for循环来查找具有此结构的每个项目,但我不清楚如何编写正则表达式。我试过了:
my_link = "//wiki//*,California"
和
my_link = "//wiki//*,_California"
但是当我试图跑步时:
br.find_element_by_link_text(my_link)
这些返回了类似的错误:
NoSuchElementException: Message: no such element: Unable to locate element: {"method":"link text","selector":"//wiki//*,_California"}
我也尝试过:
import selenium, time
import html5lib
from bs4 import BeautifulSoup
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.keys import Keys
pg_src = br.page_source.encode("utf")
soup = BeautifulSoup(pg_src)
br = webdriver.Chrome()
url = "http://somewikipage.org"
br.get(url)
lnkLst = []
for lnk in br.find_element_by_partial_link_text(",_California"):
lnkLst.append(lnk)
得到了这个:
NoSuchElementException: Message: no such element: Unable to locate element: {"method":"partial link text","selector":",_California"}
我有什么方法可以更正此代码,以便我可以建立我的目标链接列表吗?
答案 0 :(得分:0)
阅读css选择器,他们是你的朋友。我认为以下内容应该有效。
hrefs = [a.href for a in soup.select('li a[href^="/wiki/"]')]
答案 1 :(得分:0)
正如您在问题中提到的那样,br.find_element_by_partial_link_text(",_California")
无法正常工作,因为根据,_California
link_text
HTML
实际上不是<a>
提供。
根据您的问题,我们需要找到包含属性href="/wiki/town_name,_California"
的{{1}} tage。因此,您可以使用以下任何选项:
<强> css_selector
强>:
br.find_element_by_css_selector("a[href=/wiki/town_name,_California]")
<强> xpath
强>:
br.find_element_by_xpath("//a[@href='/wiki/town_name,_California']")