Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python请求只提取一半的预期标记_Python_Selenium_Beautifulsoup_Python Requests - Fatal编程技术网

Python请求只提取一半的预期标记

Python请求只提取一半的预期标记,python,selenium,beautifulsoup,python-requests,Python,Selenium,Beautifulsoup,Python Requests,我正试图抓取一个网站,并提取每个警长的姓名和郡名。我正在使用chrome中的devtools来识别定位该信息所需的HTML标记 import pandas as pd import numpy as np from bs4 import BeautifulSoup URL = 'https://oregonsheriffs.org/about-ossa/meet-your-sheriffs' page = requests.get(URL) soup = BeautifulSoup(page.

我正试图抓取一个网站,并提取每个警长的姓名和郡名。我正在使用chrome中的devtools来识别定位该信息所需的HTML标记

import pandas as pd
import numpy as np
from bs4 import BeautifulSoup

URL = 'https://oregonsheriffs.org/about-ossa/meet-your-sheriffs'
page = requests.get(URL)
soup = BeautifulSoup(page.content, 'html.parser')

sheriff_names = soup.find_all('a', class_ = 'eg-sheriff-list-skin-element-1')
sheriff_counties = soup.find_all(class_ = 'eg-sheriff-list-skin-element-2')
然而,我发现请求并没有拉取整个页面的html,即使标签在最后。如果我扫描
page.content
,我会发现哈罗德警长是最后一位被包括在内的警长,而从柯蒂斯·兰德斯开始的每一位警长都没有被包括在内(我尝试粘贴
page.contents
的完整输出,但太长了)

我从阅读中猜到,网站上有javascripts,在与页面交互时加载页面的其余部分,这意味着我需要使用Selenium之类的东西与页面交互,以便首先加载页面的其余部分

然而,如果你看一下这个网站,它非常简单,所以作为一个新手,我认为必须有一种方法可以在不使用像Selenium这样更复杂的工具的情况下刮取这个基本网站。这就是说,我认识到该网站是wordpress生成的,wordpress甚至可以在简单的网站上设置延迟的Java脚本

我的问题是: 1) 我真的需要使用Selenium来创建一个简单的word press生成的网站吗?或者,有没有一种方法可以让整个页面只加载请求?是否有任何方法可以告诉网页何时需要web驱动程序,何时请求不够? 2) 我想在这里前进一步-如果我想扩大这个项目的规模,我怎么能告诉请求没有返回完整的网站,而不手动检查每个网站的结果


谢谢

不幸的是,你最初的直觉几乎肯定是正确的。如果你看一下页面源代码,他们似乎有某种延迟加载,从外部源中提取内容

快速查看页面源代码表明,他们可能正在使用“基本网格”WordPress主题来实现这一点。我认为这支持预加载。如果您查看所发出的请求,您可能能够确定它是如何加载该请求并直接从该源(可能是REST调用、AJAX等)提取的

从广义上讲,我担心没有任何自动的方法可以通过编程确定页面是否已“完全”加载,因为这种行为是在代码中定义的,并且可以由任何东西触发


但是,如果您想从滚动时加载内容的页面中捕获信息,我相信Selenium是您必须使用的工具。

尝试添加用户代理,谢谢!基于该链接,我尝试了以下操作:header={'User Agent':'Mozilla/5.0'},然后我将header传递给requests.get:page=requests.get(URL,headers=header)也有同样的问题-没有拾取页面的下半部分