在python中使用selenium获取所有href链接

时间:2016-01-13 06:26:49

标签: python python-2.7 selenium selenium-webdriver web-scraping

我在python中练习selenium,我想使用selenium获取网页上的所有链接。

例如,我想要' a href"中的所有链接来自此网站的标记:http://psychoticelites.com/

我已经写了一个脚本,它正在运行。但是,它宁愿给我对象地址。我已经尝试过使用' id'标记以获取值,但是,它不起作用。

我目前的剧本: -

from selenium import webdriver
from selenium.webdriver.common.keys import Keys



driver = webdriver.Firefox()
driver.get("http://psychoticelites.com/")
assert "Psychotic" in driver.title
continue_link = driver.find_element_by_tag_name('a')
elem = driver.find_elements_by_xpath("//*[@href]")
#x = str(continue_link)
#print continue_link
#print elem
z = elem
print z

任何形式的线索/暗示都会受到赞赏。

8 个答案:

答案 0 :(得分:31)

嗯,你必须简单地遍历列表。

elems = driver.find_elements_by_xpath("//a[@href]")
for elem in elems:
    print elem.get_attribute("href")

find_elements_by_*返回元素列表(注意'elements'的拼写)。循环遍历列表,获取每个元素并从中获取所需的属性值。 (在这种情况下为href

答案 1 :(得分:3)

我已经检查并测试了可以使用的名为find_elements_by_tag_name()的函数。这个例子对我来说很好。

elems = driver.find_elements_by_tag_name('a')
    for elem in elems:
        href = elem.get_attribute('href')
        if href is not None:
            print(href)

答案 2 :(得分:2)

您可以尝试以下内容:

    links = driver.find_elements_by_partial_link_text('')

答案 3 :(得分:1)

您可以在python中使用html dom库导入HTML dom。你可以在这里找到它并使用PIP安装它:

https://pypi.python.org/pypi/htmldom/2.0

from htmldom import htmldom
dom = htmldom.HtmlDom("https://www.github.com/")  
dom = dom.createDom()

上面的代码创建了一个HtmlDom对象.HtmlDom采用默认参数,即页面的url。创建dom对象后,需要调用 HtmlDom 的“createDom”方法。这将解析html数据并构造解析树,然后解析树可用于搜索和操作html数据。库所强加的唯一限制是数据是html还是xml必须有根元素。

您可以使用HtmlDom对象的“find”方法查询元素:

p_links = dom.find("a")  
for link in p_links:
  print ("URL: " +link.attr("href"))

以上代码将打印网页上的所有链接/网址

答案 4 :(得分:1)

您可以通过使用 BeautifulSoup 以非常简单有效的方式做到这一点。我已经测试了下面的代码并且为了同样的目的工作得很好。

在这一行之后 -

driver.get("http://psychoticelites.com/")

使用下面的代码 -

response = requests.get(browser.current_url)
soup = BeautifulSoup(response.content, 'html.parser')
for link in soup.find_all('a'):
    if link.get('href'):
       print(link.get("href"))
       print('\n')

答案 5 :(得分:0)

import requests
from selenium import webdriver
import bs4
driver = webdriver.Chrome(r'C:\chromedrivers\chromedriver') #enter the path
data=requests.request('get','https://google.co.in/') #any website
s=bs4.BeautifulSoup(data.text,'html.parser')
for link in s.findAll('a'):
    print(link)

答案 6 :(得分:0)

很遗憾,OP发布的原始链接已死...

如果您正在寻找一种方法来抓取页面上的链接,请按照以下方法使用gazpacho抓取此页面上的所有“热网络问题”链接:

from gazpacho import Soup

url = "https://stackoverflow.com/q/34759787/3731467"

soup = Soup.get(url)
a_tags = soup.find("div", {"id": "hot-network-questions"}).find("a")

[a.attrs["href"] for a in a_tags]

答案 7 :(得分:0)

driver.get(URL)
time.sleep(7)
elems = driver.find_elements_by_xpath("//a[@href]")
for elem in elems:
    print(elem.get_attribute("href"))
driver.close()

注意:添加延迟非常重要。首先在调试模式下运行它并确保您的 URL 页面正在加载。如果页面加载缓慢,请增加延迟(睡眠时间)然后提取。

如果您仍然遇到任何问题,请参考以下链接(以示例说明)或评论

Extract links from webpage using selenium webdriver