【问题标题】:Web scraping for a javascript rendered website using selenium使用 selenium 对 javascript 呈现的网站进行 Web 抓取
【发布时间】:2021-01-31 13:25:33
【问题描述】:

如果这个问题看起来很新手,请原谅,因为我对它很陌生,但我已经尝试了很多方法,但无法找到任何解决方案。 我试图刮掉这个 website 。下面是代码:-

import requests
import pandas as pd
import re
from bs4 import BeautifulSoup
from selenium import webdriver
import time
urls = []
for i in range(1,5):
    pages = "https://speta.org/home/directory-of-members/?type=companies&category%5B%5D=corporate-member&pg={0}&sort=a-z".format(i)
    urls.append(pages)
Data = []
options = webdriver.ChromeOptions()
options.add_argument('headless') 
browser = webdriver.Chrome(executable_path =r"C:/XXXXXX/XXXXXXX/chromedriver.exe", options=options)
links=[]
for info in urls:
    browser.get(info)
    time.sleep(10)
    elements = browser.find_element_by_xpath("//div[@class='1f-item 1f-item-default']/a")
    link = [elem.get_attribute('href') for elem in elements]
    links.append(link)
print(links)

错误:-

NoSuchElementException: Message: no such element: Unable to locate element: {"method":"xpath","selector":"//div[@class='1f-item 1f-item-default']/a"}
  (Session info: headless chrome=88.0.4324.104)

我确定我在此处识别正确标签时犯了一个错误, 任何建议将不胜感激!!

谢谢!!

【问题讨论】:

  • 对于单个元素使用 browser.find_element_by_xpath 并找到多个元素 browser.find_elements_by_xpath,其返回列表
  • @SamsulIslam _ 即使我使用元素,它也会给出一个空列表

标签: python-3.x selenium-webdriver web-scraping beautifulsoup


【解决方案1】:

它对我有用。要查找多个元素,请使用 browser.find_elements_by_xpath 。在这里,我使用了browser.find_elements_by_css_selector 它的返回列表。 你也可以使用这个xpath

browser.find_elements_by_xpath("//*[@id='c27-explore-listings']/section/div/div[2]/div[1]/div/div[1]/a")

这也是有效的。

import requests
import pandas as pd
import re
from bs4 import BeautifulSoup
from selenium import webdriver
import time
urls = []
for i in range(1,5):
    pages = "https://speta.org/home/directory-of-members/?type=companies&category%5B%5D=corporate-member&pg={0}&sort=a-z".format(i)
    urls.append(pages)
Data = []
options = webdriver.ChromeOptions()
options.add_argument('headless')
browser = webdriver.Chrome(options=options)
links=[]
for info in urls:
    browser.get(info)
    time.sleep(10)
    elements = browser.find_elements_by_css_selector("div.lf-item.lf-item-default a")
    # elements = browser.find_elements_by_xpath("//*[@id='c27-explore-listings']/section/div/div[2]/div[1]/div/div[1]/a")
    link = [elem.get_attribute('href') for elem in elements]
    links.append(link)
print(links)

【讨论】:

    猜你喜欢
    • 2018-04-21
    • 2019-06-15
    • 2018-03-02
    • 1970-01-01
    • 1970-01-01
    • 2018-08-09
    • 2018-01-12
    • 2021-08-28
    • 1970-01-01
    相关资源
    最近更新 更多