簡體   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