使用Python

时间:2017-10-10 20:12:26

标签: python selenium

我正在使用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"}

我有什么方法可以更正此代码,以便我可以建立我的目标链接列表吗?

2 个答案:

答案 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']")