最终,我只想尝试google搜索结果的第一个链接
我需要的信息也存在于'a'元素中,但它存储在'data-href'属性中,我无法想象如何从(get_attribute('data-href')
返回{{1}中提取数据}})。
我正在使用Phantomjs,但也尝试使用Firefox网络驱动程序
href显示在Google搜索中的None
标记中(可以通过检查Google搜索结果中每个链接下的绿色小链接文本找到)。
使用Selenium显然找到了引用元素,但返回的文本(cite
,element.text
或(get_attribute('innerHTML')
))不是html中显示的内容。
例如,有一个引用标记text
,但<cite class="_Rm">www.fcv.org.br/</cite>
显示“wikimapia.org /.../Fundação-Cristiano-Varella-Hospital ......”
我尝试使用element.text
,by_css_selector
,tag_name
和xpath检索引用元素,结果相同。
class_name
包含引用标记的div(div中只有一个)
links = driver.find_elements_by_css_selector('div.g') # div[class="g"]
link = links[0] # I am looking for the first link in the main links section
next = link.find_element_by_css_selector('div[class="s"]') # location of cite tag
nextB = next.find_element_by_tag_name('cite')
答案 0 :(得分:3)
在每个搜索结果中找到第一个a
元素并获取它的href
属性值:
from selenium import webdriver
driver = webdriver.PhantomJS()
driver.get("https://www.google.com/search?q=test")
results = driver.find_elements_by_css_selector('div.g')
link = results[0].find_element_by_tag_name("a")
href = link.get_attribute("href")
然后你可以extract the actual url from the href
value with urlparse
:
import urlparse
print(urlparse.parse_qs(urlparse.urlparse(href).query)["q"])
打印:
[u'http://www.speedtest.net/']
答案 1 :(得分:1)
搜索方法就是问题所在。它不是检索附加查询的URL,而是使用send_keys将其键发送到搜索栏,然后是ENTER。一种解决方案是检索每个页面的网址(&#39; https://www.google.com/search?q=&#39; +查询)。在这种情况下,文本检索引用,或href检索&#39; a&#39;工作原理相同,没有urlparse。或者点击谷歌的搜索按钮似乎胜过发送ENTER。
答案 2 :(得分:1)
试试这个:
module TraverseTree
ORDERS = %i[preorder inorder postorder].each do |order|
define_method(:"#{order}_traverse",
&method(:traverse_by).curry(order))
end
private
def traverse_by(order, root)
root && [
traverse_by(order, root.left),
traverse_by(order, root.right)
]
.insert(ORDERS.index(order), root.val)
.compact.flatten
end
end