Python请求只提取一半的预期标记
我正试图抓取一个网站,并提取每个警长的姓名和郡名。我正在使用chrome中的devtools来识别定位该信息所需的HTML标记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.
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)也有同样的问题-没有拾取页面的下半部分