使用 RSelenium 获取网页中的所有 twitter 链接
Get all the twitter links in a web page using RSelenium
我正在尝试使用 Rselenium 从网页中收集 URLs,但收到 InvalidSelector 错误
在 Windows 10 PC 上使用 R 3.6.0,Rselenium 1.7.5 与 Chrome webdriver (chromever="75.0.3770.8")
library(RSelenium)
rD <- rsDriver(browser=c("chrome"), chromever="75.0.3770.8")
remDr <- remoteDriver(port = 4567L, browserName = "chrome")
remDr$open()
url <- "https://www.aph.gov.au/Senators_and_Members/Parliamentarian_Search_Results?q=&mem=1&par=1&gen=0&ps=96"
remDr$navigate(url)
tt <- remDr$findElements(using = "xpath", "//a[contains(@href,'http://twitter.com/')]/@href")
我希望收集 URL 到所列政客的 Twitter 帐户。
相反,我收到下一个错误:
硒消息:
invalid selector: The result of the xpath expression "//a[contains(@href,'http://twitter.com/')]/@href" is: [object Attr]. It should be an element.
(Session info: chrome=75.0.3770.80)
For documentation on this error, please visit: https://www.seleniumhq.org/exceptions/invalid_selector_exception.html
Build info: version: '4.0.0-alpha-1', revision: 'd1d3728cae', time: '2019-04-24T16:15:24'
System info: host: 'ALEX-DELL-17', ip: '10.0.75.1', os.name: 'Windows 10', os.arch: 'amd64', os.version: '10.0', java.version: '1.8.0_191'
Driver info: driver.version: unknown
错误:摘要:InvalidSelector
详细信息:参数是无效的选择器(例如 XPath/CSS)。
class: org.openqa.selenium.InvalidSelectorException
更多详细信息:运行 errorDetails 方法
当我对非常具体的元素进行类似搜索时,一切正常,例如:
tt <- remDr$findElement(value = '//a[@href = "http://twitter.com/AlboMP"]')
然后
tt$getElementAttribute('href')
returns我URL我需要
我做错了什么?
这个错误信息...
invalid selector: The result of the xpath expression "//a[contains(@href,'http://twitter.com/')]/@href" is: [object Attr]. It should be an element.
......暗示您的 XPath 表达式无效。
xpath表达式:
//a[contains(@href,'http://twitter.com/')]/@href
return 不是一个元素。它将 return 一个 [object Attr]
。虽然使用 Selenium RC
是可以接受的,但是 WebDriver 的 WebElement 接口的方法需要一个元素对象,而不仅仅是任何 DOM 节点对象。
综上所述,还是不支持这种格式。要解决此问题,您需要更改 HTML 标记以将文本节点包装在一个元素内,例如 .
解决方案
要解决此问题,您需要使用 findElements
并创建一个 List:
findElements(value = '//a[@href = "http://twitter.com/AlboMP"]')
现在,您可以遍历 List 并使用 getElementAttribute('href')
方法提取 URL。
参考
InvalidSelectorError: The result of the xpath expression is: [object Text]
我对 R 没有任何了解,所以我 post 正在 python 回答。因为这个 post 是关于 R 的,所以我学习了一些 R 基础知识并且 post 也学了它。
获取 twitter URL 的最简单方法是遍历网页中的所有 URL 并检查其中是否包含单词 'twitter'。
在 python 中(绝对没问题):
driver.get('https://www.aph.gov.au/Senators_and_Members/Parliamentarian_Search_Results?q=&mem=1&par=1&gen=0&ps=96')
links = driver.find_elements_by_xpath("//a[@href]")
for link in links:
if 'twitter' in link.get_attribute("href"):
print(link.get_attribute("href")
结果:
http://twitter.com/AlboMP http://twitter.com/SharonBirdMP
http://twitter.com/Bowenchris http://twitter.com/tony_burke
http://twitter.com/lindaburneymp http://twitter.com/Mark_Butler_MP
https://twitter.com/terrimbutler http://twitter.com/AnthonyByrne_MP
https://twitter.com/JEChalmers http://twitter.com/NickChampionMP
https://twitter.com/LMChesters http://twitter.com/JasonClareMP
https://twitter.com/SharonClaydon
https://www.twitter.com/LibbyCokerMP
https://twitter.com/JulieCollinsMP http://twitter.com/fitzhunter
http://twitter.com/stevegeorganas https://twitter.com/andrewjgiles
https://twitter.com/lukejgosling https://www.twitter.com/JulianHillMP
http://twitter.com/stephenjonesalp https://twitter.com/gedkearney
https://twitter.com/MikeKellyofEM http://twitter.com/mattkeogh
http://twitter.com/PeterKhalilMP http://twitter.com/CatherineKingMP
https://twitter.com/MadeleineMHKing https://twitter.com/ALEIGHMP
https://twitter.com/RichardMarlesMP
https://twitter.com/brianmitchellmp
http://twitter.com/#!/RobMitchellMP
http://twitter.com/ShayneNeumannMP https://twitter.com/ClareONeilMP
http://twitter.com/JulieOwensMP
http://www.twitter.com/GrahamPerrettMP
http://twitter.com/tanya_plibersek http://twitter.com/AmandaRishworth
http://twitter.com/MRowlandMP https://twitter.com/JoanneRyanLalor
http://twitter.com/billshortenmp http://www.twitter.com/annewerriwa
http://www.twitter.com/stemplemanmp
https://twitter.com/MThistlethwaite
http://twitter.com/MariaVamvakinou https://twitter.com/TimWattsMP
https://twitter.com/joshwilsonmp
在 R 中:(这可能是错误的,但你可以得到一个想法)
library(XML)
library(RCurl)
library(RSelenium)
url <- "https://www.aph.gov.au/Senators_and_Members/Parliamentarian_Search_Results?q=&mem=1&par=1&gen=0&ps=96"
doc <- getURL(url)
parser <- htmlParse(doc)
links <- xpathSApply(parser, "//a[@href]", xmlGetAttr, "href")
for(link in links){
if(grepl("twitter", link)){
print(link)
}
}
我什至不知道这段代码是否有效。但想法是获取页面中的所有 URLs,遍历它并检查其中是否包含 twitter 一词。
我的回答是基于 this
我正在尝试使用 Rselenium 从网页中收集 URLs,但收到 InvalidSelector 错误
在 Windows 10 PC 上使用 R 3.6.0,Rselenium 1.7.5 与 Chrome webdriver (chromever="75.0.3770.8")
library(RSelenium)
rD <- rsDriver(browser=c("chrome"), chromever="75.0.3770.8")
remDr <- remoteDriver(port = 4567L, browserName = "chrome")
remDr$open()
url <- "https://www.aph.gov.au/Senators_and_Members/Parliamentarian_Search_Results?q=&mem=1&par=1&gen=0&ps=96"
remDr$navigate(url)
tt <- remDr$findElements(using = "xpath", "//a[contains(@href,'http://twitter.com/')]/@href")
我希望收集 URL 到所列政客的 Twitter 帐户。 相反,我收到下一个错误:
硒消息:
invalid selector: The result of the xpath expression "//a[contains(@href,'http://twitter.com/')]/@href" is: [object Attr]. It should be an element.
(Session info: chrome=75.0.3770.80)
For documentation on this error, please visit: https://www.seleniumhq.org/exceptions/invalid_selector_exception.html
Build info: version: '4.0.0-alpha-1', revision: 'd1d3728cae', time: '2019-04-24T16:15:24'
System info: host: 'ALEX-DELL-17', ip: '10.0.75.1', os.name: 'Windows 10', os.arch: 'amd64', os.version: '10.0', java.version: '1.8.0_191'
Driver info: driver.version: unknown
错误:摘要:InvalidSelector 详细信息:参数是无效的选择器(例如 XPath/CSS)。 class: org.openqa.selenium.InvalidSelectorException 更多详细信息:运行 errorDetails 方法
当我对非常具体的元素进行类似搜索时,一切正常,例如:
tt <- remDr$findElement(value = '//a[@href = "http://twitter.com/AlboMP"]')
然后
tt$getElementAttribute('href')
returns我URL我需要
我做错了什么?
这个错误信息...
invalid selector: The result of the xpath expression "//a[contains(@href,'http://twitter.com/')]/@href" is: [object Attr]. It should be an element.
......暗示您的 XPath 表达式无效。
xpath表达式:
//a[contains(@href,'http://twitter.com/')]/@href
return 不是一个元素。它将 return 一个 [object Attr]
。虽然使用 Selenium RC
是可以接受的,但是 WebDriver 的 WebElement 接口的方法需要一个元素对象,而不仅仅是任何 DOM 节点对象。
综上所述,
解决方案
要解决此问题,您需要使用 findElements
并创建一个 List:
findElements(value = '//a[@href = "http://twitter.com/AlboMP"]')
现在,您可以遍历 List 并使用 getElementAttribute('href')
方法提取 URL。
参考
InvalidSelectorError: The result of the xpath expression is: [object Text]
我对 R 没有任何了解,所以我 post 正在 python 回答。因为这个 post 是关于 R 的,所以我学习了一些 R 基础知识并且 post 也学了它。
获取 twitter URL 的最简单方法是遍历网页中的所有 URL 并检查其中是否包含单词 'twitter'。
在 python 中(绝对没问题):
driver.get('https://www.aph.gov.au/Senators_and_Members/Parliamentarian_Search_Results?q=&mem=1&par=1&gen=0&ps=96')
links = driver.find_elements_by_xpath("//a[@href]")
for link in links:
if 'twitter' in link.get_attribute("href"):
print(link.get_attribute("href")
结果:
http://twitter.com/AlboMP http://twitter.com/SharonBirdMP
http://twitter.com/Bowenchris http://twitter.com/tony_burke
http://twitter.com/lindaburneymp http://twitter.com/Mark_Butler_MP
https://twitter.com/terrimbutler http://twitter.com/AnthonyByrne_MP
https://twitter.com/JEChalmers http://twitter.com/NickChampionMP
https://twitter.com/LMChesters http://twitter.com/JasonClareMP
https://twitter.com/SharonClaydon
https://www.twitter.com/LibbyCokerMP
https://twitter.com/JulieCollinsMP http://twitter.com/fitzhunter
http://twitter.com/stevegeorganas https://twitter.com/andrewjgiles
https://twitter.com/lukejgosling https://www.twitter.com/JulianHillMP http://twitter.com/stephenjonesalp https://twitter.com/gedkearney
https://twitter.com/MikeKellyofEM http://twitter.com/mattkeogh
http://twitter.com/PeterKhalilMP http://twitter.com/CatherineKingMP
https://twitter.com/MadeleineMHKing https://twitter.com/ALEIGHMP
https://twitter.com/RichardMarlesMP
https://twitter.com/brianmitchellmp
http://twitter.com/#!/RobMitchellMP
http://twitter.com/ShayneNeumannMP https://twitter.com/ClareONeilMP
http://twitter.com/JulieOwensMP
http://www.twitter.com/GrahamPerrettMP
http://twitter.com/tanya_plibersek http://twitter.com/AmandaRishworth http://twitter.com/MRowlandMP https://twitter.com/JoanneRyanLalor
http://twitter.com/billshortenmp http://www.twitter.com/annewerriwa
http://www.twitter.com/stemplemanmp
https://twitter.com/MThistlethwaite
http://twitter.com/MariaVamvakinou https://twitter.com/TimWattsMP
https://twitter.com/joshwilsonmp
在 R 中:(这可能是错误的,但你可以得到一个想法)
library(XML)
library(RCurl)
library(RSelenium)
url <- "https://www.aph.gov.au/Senators_and_Members/Parliamentarian_Search_Results?q=&mem=1&par=1&gen=0&ps=96"
doc <- getURL(url)
parser <- htmlParse(doc)
links <- xpathSApply(parser, "//a[@href]", xmlGetAttr, "href")
for(link in links){
if(grepl("twitter", link)){
print(link)
}
}
我什至不知道这段代码是否有效。但想法是获取页面中的所有 URLs,遍历它并检查其中是否包含 twitter 一词。 我的回答是基于 this