Python HTMl刮取不会产生结果

Python HTMl刮取不会产生结果,python,python-3.x,xpath,web-scraping,lxml,Python,Python 3.x,Xpath,Web Scraping,Lxml,(Python和第1篇文章新增) 请参见下面的代码,但问题是: 我试图在代码中为网页上的所有职务标题刮取网页,但是当我打印列表时,我没有得到任何值。我尝试过使用不同的XPath来查看是否可以打印一些东西,但每次我的列表总是空的 是否有人知道这是我的代码中的一个问题,或者是否有关于我没有考虑的站点结构的东西? 提前谢谢 from lxml import html import requests page = requests.get("https://careers.homedepot.com/

(Python和第1篇文章新增)

请参见下面的代码,但问题是: 我试图在代码中为网页上的所有职务标题刮取网页,但是当我打印列表时,我没有得到任何值。我尝试过使用不同的XPath来查看是否可以打印一些东西,但每次我的列表总是空的

是否有人知道这是我的代码中的一个问题,或者是否有关于我没有考虑的站点结构的东西?

提前谢谢

from lxml import html
import requests

page = requests.get("https://careers.homedepot.com/job-search-results/?location=Atlanta%2C%20GA%2C%20United%20States&latitude=33.7489954&longitude=-84.3879824&radius=15&parent_category=Corporate%2FOther")
tree = html.fromstring(page.content)

Job_Title = tree.xpath('//*[@id="widget-jobsearch-results-list"]/div/div/div/div[@class="jobTitle"]/a/text()')

print (Job_Title)
该页面使用JS构建HTML(表)。换句话说,目标块在该页面上不作为HTML存在。请打开源代码并检查它

<div class="entry-content-wrapper clearfix">
    <div id="widget-jobsearch-results-list"></div> # <- Target block is empty!
    <div id="widget-jobsearch-results-pages"></div>
</div>

#该页面使用JS构建HTML(表)。换句话说,目标块在该页面上不作为HTML存在。请打开源代码并检查它

<div class="entry-content-wrapper clearfix">
    <div id="widget-jobsearch-results-list"></div> # <- Target block is empty!
    <div id="widget-jobsearch-results-pages"></div>
</div>


#您正在查找的信息是通过一些
JavaScript
动态生成的,而
请求
只允许获取初始
HTML
页面源代码

您可能需要使用(+)来获取所需数据:

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

driver = webdriver.Chrome()
driver.get("https://careers.homedepot.com/job-search-results/?location=Atlanta%2C%20GA%2C%20United%20States&latitude=33.7489954&longitude=-84.3879824&radius=15&parent_category=Corporate%2FOther")
xpath = "//a[starts-with(@id, 'job-results')]"
wait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, xpath)))
jobs = [job.text for job in driver.find_elements_by_xpath(xpath)]

您正在查找的信息是通过一些
JavaScript
动态生成的,而
请求
只允许获取初始
HTML
页面源代码

您可能需要使用(+)来获取所需数据:

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

driver = webdriver.Chrome()
driver.get("https://careers.homedepot.com/job-search-results/?location=Atlanta%2C%20GA%2C%20United%20States&latitude=33.7489954&longitude=-84.3879824&radius=15&parent_category=Corporate%2FOther")
xpath = "//a[starts-with(@id, 'job-results')]"
wait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, xpath)))
jobs = [job.text for job in driver.find_elements_by_xpath(xpath)]

尝试一个可以解析JS的库(这是一个轻量级的替代方案)

这是一个代码示例

from lxml import html
import requests
import dryscrape

session = dryscrape.Session()
session.visit("https://careers.homedepot.com/job-search-results/?location=Atlanta%2C%20GA%2C%20United%20States&latitude=33.7489954&longitude=-84.3879824&radius=15&parent_category=Corporate%2FOther")
page = session.body()
tree = html.fromstring(page.content)

Job_Title = tree.xpath('//*[@id="widget-jobsearch-results-list"]/div/div/div/div[@class="jobTitle"]/a/text()')

print (Job_Title)

尝试一个可以解析JS的库(这是一个轻量级的替代方案)

这是一个代码示例

from lxml import html
import requests
import dryscrape

session = dryscrape.Session()
session.visit("https://careers.homedepot.com/job-search-results/?location=Atlanta%2C%20GA%2C%20United%20States&latitude=33.7489954&longitude=-84.3879824&radius=15&parent_category=Corporate%2FOther")
page = session.body()
tree = html.fromstring(page.content)

Job_Title = tree.xpath('//*[@id="widget-jobsearch-results-list"]/div/div/div/div[@class="jobTitle"]/a/text()')

print (Job_Title)

谢谢,有机会我会试试的。你怎么知道它是JS?(我还没有学到任何东西)在我看来,HTML、CSS和一些Python(我认为)都是混合体。我最终选择了Andersson发布的Selenium解决方案。根据我所读的内容,我认为dryscrape会运行得很好,但它似乎不支持Win(我使用的是Win)。谢谢,有机会我会尝试一下。你怎么知道它是JS?(我还没有学到任何东西)在我看来,HTML、CSS和一些Python(我认为)都是混合体。我最终选择了Andersson发布的Selenium解决方案。根据我所读到的内容,我认为DryScrap会运行得很好,但它似乎不支持Win(我使用的是Win)。其他一些帖子提到其中有一些JS。有没有一个好的方法来判断它的JS当前是否不了解JS?感谢您的评论,我会在有机会的时候尝试一下这些想法。您只需在浏览器中右键单击页面,然后在上下文菜单中单击
页面源代码
,在浏览器执行任何
JavaScript
之前查看页面源代码。如果没有所需的数据,那么您可以确保由
JavaScript
动态生成的数据只运行此操作。这似乎是朝着正确方向迈出的一步。非常感谢。现在只需要更加熟悉Selenium,hahaSome的其他帖子提到这里有一些JS。有没有一个好的方法来判断它的JS当前是否不了解JS?感谢您的评论,我会在有机会的时候尝试一下这些想法。您只需在浏览器中右键单击页面,然后在上下文菜单中单击
页面源代码
,在浏览器执行任何
JavaScript
之前查看页面源代码。如果没有所需的数据,那么您可以确保由
JavaScript
动态生成的数据只运行此操作。这似乎是朝着正确方向迈出的一步。非常感谢。现在我们只需要更加熟悉硒元素,哈佛戈就可以跟进这一点,但我想我应该指出硒元素确实起到了作用。更多信息请参见下文。我忘了跟进这一点,但我想我应该指出硒确实起了作用。有关更多信息,请参见下文。