繁体   English   中英

网页抓取 Linkedin 配置文件:无法选择所有链接

[英]Web Scraping Linkedin Profiles: Cannot pick all links

以下是正在使用的代码:

linkedin_urls = driver.find_elements_by_class_name('r')

sub = 'linkedin.com'

for linkedin_url in linkedin_urls:
    tag = linkedin_url.find_element_by_tag_name('a')
    URL = tag.get_attribute('href')

    if sub in URL:
       try:
          driver.get(URL)
          sleep(5)
          driver.back()
          driver.get(URL)
       except:
          pass
  • 以下是我得到的错误:

回溯(最近一次调用最后一次):

文件“”,第 25 行,在 tag = linkedin_url.find_element_by_tag_name('a')

文件“C:\\Users\\deepankar.garg\\AppData\\Roaming\\Python\\Python37\\site-packages\\selenium\\webdriver\\remote\\webelement.py”,第 305 行,在 find_element_by_tag_name 中返回 self.find_element(by=By.TAG_NAME,值=名称)

文件“C:\\Users\\deepankar.garg\\AppData\\Roaming\\Python\\Python37\\site-packages\\selenium\\webdriver\\remote\\webelement.py”,第 659 行,在 find_element {"using": by, "value":价值})['价值']

文件“C:\\Users\\deepankar.garg\\AppData\\Roaming\\Python\\Python37\\site-packages\\selenium\\webdriver\\remote\\webelement.py”,第 633 行,在 _execute 中返回 self._parent.execute(command, params)

文件“C:\\Users\\deepankar.garg\\AppData\\Roaming\\Python\\Python37\\site-packages\\selenium\\webdriver\\remote\\webdriver.py”,第321行,在执行self.error_handler.check_response(response)

文件“C:\\Users\\deepankar.garg\\AppData\\Roaming\\Python\\Python37\\site-packages\\selenium\\webdriver\\remote\\errorhandler.py”,第 242 行,在 check_response 中引发 exception_class(message, screen, stacktrace)

StaleElementReferenceException:过时的元素引用:元素未附加到页面文档(会话信息:chrome=79.0.3945.79)

以下是IF条件之前的输出:

https://www.linkedin.com/in/elena-grewal

https://www.quora.com/What-is-the-difference-between-Data-Science-and-Analytics

https://www.edureka.co/blog/what-is-data-science/

以下是IF条件后的输出:

https://www.linkedin.com/in/elena-grewal

https://in.linkedin.com/in/bsatya

https://www.linkedin.com/in/kylemckiou

我知道错误意味着什么,但我不知道如何解决它。 我只想在单独的 Web 浏览器中以“if”(真)条件打开每个链接。 上面“IF 之后”条件中存在的链接是我希望在每个选项卡中打开的链接。

任何帮助将非常感激!

StaleElementReferenceException当元素不再存在于 div 中或StaleElementReferenceException出现。 在您导航到下一页后返回 url 的场景中,当您尝试再次访问该元素时,该元素已过时。

要解决它,您需要在访问它之前再次获取该元素。
你可以这样做:

linkedin_urls = driver.find_elements_by_class_name('r')

sub = 'linkedin.com'

while i < len(linkedin_urls): 
    tag = linkedin_urls[i].find_element_by_tag_name('a')
    URL = tag.get_attribute('href')
    i += 1

    if sub in URL:
       try:
          driver.get(URL)
          sleep(5)
          driver.back()
          driver.get(URL)
          # Fetching the element again here
          linkedin_urls = driver.find_elements_by_class_name('r') 
       except:
          pass

最后!

我得到了解决方案。 以下是我尝试过并且有效的方法:

all_urls = driver.find_elements_by_css_selector("div > a")

urls = []
for elem in all_urls:
text = elem.text
url = elem.get_property('href')
if "linkedin.com" in elem.text:
    urls.append(url) 
#print(urls)
for url in urls:
   driver.get(url)
   sleep(2)
   print(url)

感谢大家的帮助!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM