Python 抓取动态信息

Python 抓取动态信息,python,selenium,xpath,web-scraping,css-selectors,Python,Selenium,Xpath,Web Scraping,Css Selectors,我最近开始编写代码,我使用Python和Pycharm。我安装并导入了所需的“附加组件”,如Selenium。 在我的第一个项目中,我尝试从这个网站获取“地址”信息: https://randomstreetview.com/#fullscreen 当我使用Chrome开发者工具(F12)时,信息显示在div'address'之后。经过多次尝试和错误,我设法以多种方式浏览网站,但在div后面什么也没有出现。 因此,我查了一下,认为这是一个动态信息,所以我开始尝试使用Selenium和我在网上

我最近开始编写代码,我使用Python和Pycharm。我安装并导入了所需的“附加组件”,如Selenium。
在我的第一个项目中,我尝试从这个网站获取“地址”信息:

https://randomstreetview.com/#fullscreen

当我使用Chrome开发者工具(F12)时,信息显示在div'address'之后。经过多次尝试和错误,我设法以多种方式浏览网站,但在div后面什么也没有出现。
因此,我查了一下,认为这是一个动态信息,所以我开始尝试使用Selenium和我在网上找到的其他代码。
什么都没用,或者我没能让它工作。
每次打开网站时,地址都会更改,但位置保持不变(afaik)。
有人能帮我写一个工作代码或者帮我走上正确的道路吗

我可以提供不同的方法,但我认为这不会有帮助。如果您想要元素的地址,只需获取元素并打印它的文本即可

driver.get("https://randomstreetview.com/")
wait = WebDriverWait(driver, 10)
elem = wait.until(EC.presence_of_element_located((By.ID, "address")))
print(elem.text)
元素

<div id="address">Nordre Ringvej 97, 2600 Glostrup, Dänemark</div>
进口

from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait 
from selenium.webdriver.support import expected_conditions as EC

依靠阿伦德普·乔汉的回答。无法获取地址的原因是它是一个隐藏元素

看看这篇文章

TLDR;“text属性允许您仅从可见元素获取文本,而textContent属性也允许获取隐藏元素的文本…”

此代码还可以使用CSS选择器工作

element = WebDriverWait(driver,10).until(EC.presence_of_element_located((By.CSS_SELECTOR, 'div#address')))

print(element.get_attribute('textContent'))
要打印文本
,可以使用以下任一选项:

  • 使用
    id
    get\u属性(“textContent”)

  • 使用
    css\u选择器
    get\u属性(“innerHTML”)

  • 使用
    xpath
    和文本属性:

    driver.get("https://randomstreetview.com/#fullscreen")
    print(driver.find_element_by_xpath("//div[@id='address']").text)  
    
    print(WebDriverWait(driver, 20).until(EC.presence_of_element_located((By.CSS_SELECTOR, "div#address"))).text)
    

理想情况下,您需要诱导元素located()的存在,并且您可以使用以下任一项:

  • 使用
    ID
    get\u属性(“textContent”)

  • 使用
    CSS\u选择器
    和文本属性:

    driver.get("https://randomstreetview.com/#fullscreen")
    print(driver.find_element_by_xpath("//div[@id='address']").text)  
    
    print(WebDriverWait(driver, 20).until(EC.presence_of_element_located((By.CSS_SELECTOR, "div#address"))).text)
    
  • 使用
    XPATH
    get\u attribute()

  • 控制台输出:

    value
    
    Ciudad Pérdida 10, La Sabana, 39799 Acapulco, Guerrero, Mexico
    
  • 注意:您必须添加以下导入:

    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    
  • 控制台输出:

    value
    
    Ciudad Pérdida 10, La Sabana, 39799 Acapulco, Guerrero, Mexico
    
您可以在中找到相关的讨论


工具书类 链接到有用的文档:

  • 方法
    获取元素的给定属性或属性。
  • 属性返回元素的文本。

发布您尝试过的代码。或者您想要访问的HTML。注意常见的陷阱,如Iframe。欢迎使用堆栈溢出!请阅读,特别是关于(MCVE)的部分,这将帮助您调试自己的程序并自行解决问题。如果您这样做了,但仍然卡住了,您可以回来发布您的MCVE,您尝试了什么,以及执行结果,包括任何错误消息,以便我们可以更好地帮助您。还提供指向页面和/或相关HTML的链接。
Ciudad Pérdida 10, La Sabana, 39799 Acapulco, Guerrero, Mexico