2017-10-10 74 views
1

我使用selenium和BeautifulSoup从维基百科页面创建了几个列表。当我看网页的源文件,链接我想从总是如此构成的信息:使用Python从HTML元素生成列表

<li><a href="/wiki/town_name,_California" title="town_name, California">town_name, state</a></li> 

还有就是标签中的链接,你可以对点击将引导您到镇上的wiki页面。它总是/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

你抢页面的源代码,汤。循环通过汤的链接。 – IamBatman

+0

@IamBatman尝试了soup.select(“a [href * =,_ California]”)并且得到了ValueError:不支持的无效CSS选择器“a [href * =” – ShaunO

+1

@IamBatman得到了这个工作:soup.find_all(“a” ,href = re.compile(“,_ California”))。感谢您指点我正确的方向。 – ShaunO

回答

0

正如你在你的问题中提到的是br.find_element_by_partial_link_text(",_California")没有工作,那是因为,_California是不是真的link_text为每HTML你提供。

根据您的问题,我们需要找到包含属性href="/wiki/town_name,_California"<a> 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']") 
    
0

阅读css选择器,他们是你的朋友。我认为以下应该工作。

hrefs = [a.href for a in soup.select('li a[href^="/wiki/"]')] 
+0

看看css选择器,但有隔离正确的问题。我插入了你的代码,它返回了一个Nones列表。 – ShaunO