当前位置: 首页 > 知识库问答 >
问题:

在python中使用selenium刮取动态网页失败

越宣
2023-03-14

我正试图从这一页上删除所有5000家公司。当我向下滚动时,它的动态页面和公司被加载。但我只能刮去5家公司的钱,那我怎么能刮去全部5000家呢?当我向下滚动页面时,URL正在更改。我试过硒,但没用。https://www.inc.com/profile/onetrust注意:我想刮公司的所有信息,但刚才选择了两个。

import time
from urllib.request import urlopen as uReq
from bs4 import BeautifulSoup as soup
from selenium import webdriver
from selenium.webdriver.chrome.options import Options

my_url = 'https://www.inc.com/profile/onetrust'

options = Options()
driver = webdriver.Chrome(chrome_options=options)
driver.get(my_url)
time.sleep(3)
page = driver.page_source
driver.quit()

uClient = uReq(my_url)
page_html = uClient.read()
uClient.close()

page_soup = soup(page_html, "html.parser")

containers = page_soup.find_all("div", class_="sc-prOVx cTseUq company-profile")
container = containers[0]

for container in containers:
    rank = container.h2.get_text()
    company_name_1 = container.find_all("h2", class_="sc-AxgMl LXebc h2")
    Company_name = company_name_1[0].get_text()


    print("rank :" + rank)
    print("Company_name :" + Company_name)

更新了代码,但页面根本不滚动。更正了BeautifulSoup代码中的一些错误

import time
from bs4 import BeautifulSoup as soup
from selenium import webdriver

my_url = 'https://www.inc.com/profile/onetrust'

driver = webdriver.Chrome()
driver.get(my_url)


def scroll_down(self):
    """A method for scrolling the page."""

    # Get scroll height.
    last_height = self.driver.execute_script("return document.body.scrollHeight")

    while True:

        # Scroll down to the bottom.
        self.driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")

        # Wait to load the page.
        time.sleep(2)

        # Calculate new scroll height and compare with last scroll height.
        new_height = self.driver.execute_script("return document.body.scrollHeight")

        if new_height == last_height:

            break

        last_height = new_height


page_soup = soup(driver.page_source, "html.parser")

containers = page_soup.find_all("div", class_="sc-prOVx cTseUq company-profile")
container = containers[0]

for container in containers:
    rank = container.h2.get_text()
    company_name_1 = container.find_all("h2", class_="sc-AxgMl LXebc h2")
    Company_name = company_name_1[0].get_text()


    print("rank :" + rank)
    print("Company_name :" + Company_name)

谢谢你的阅读!

共有1个答案

公冶和豫
2023-03-14

尝试下面的方法使用python-请求简单,直接,可靠,快速,当涉及到请求时需要更少的代码。我在检查了google chrome浏览器的网络部分后,从网站本身获取了应用编程接口网址。

下面的脚本到底在做什么:

>

获取数据后,脚本将使用json.loads库解析JSON数据。

最后,它将迭代所有的公司列表列表,并打印它们,例如:-排名,公司名称,社交账户链接,首席执行官姓名等。

import json
import requests
from urllib3.exceptions import InsecureRequestWarning
requests.packages.urllib3.disable_warnings(InsecureRequestWarning)

def scrap_inc_5000():

URL = 'https://www.inc.com/rest/companyprofile/nuleaf-naturals/withlist'

response = requests.get(URL,verify = False)
result = json.loads(response.text) #Parse result using JSON loads
extracted_data = result['fullList']['listCompanies']
for data in extracted_data:
    print('-' * 100)
    print('Rank : ',data['rank'])
    print('Company : ',data['company'])
    print('Icon : ',data['icon'])
    print('CEO Name : ',data['ifc_ceo_name'])
    print('Facebook Address : ',data['ifc_facebook_address'])
    print('File Location : ',data['ifc_filelocation'])
    print('Linkedin Address : ',data['ifc_linkedin_address'])
    print('Twitter Handle : ',data['ifc_twitter_handle'])
    print('Secondary Link : ',data['secondary_link'])
    print('-' * 100)
scrap_inc_5000()
 类似资料:
  • 我试图刮这个网站:https://ec.europa.eu/research/mariecurieactions/how-to/find-job_en使用Python。 首先,我注意到我感兴趣的表实际上位于以下url:https://ec.europa.eu/assets/eac/msca/jobs/import-jobs_en.htm 然而,请求BS4只给我超文本标记语言的页面源。我假设这是因为

  • 问题内容: 在网站上,有在标顶部的几个环节,,,和。如果按下以数字标记的链接,它将动态地将一些数据加载到content中。如果被按下,它会用标签页,,,和第4页中的数据显示。 我想从按下的所有链接的内容中抓取数据(我不知道有多少,一次只显示3个,然后) 请举一个例子。例如,考虑网站www.cnet.com。 请指导我下载使用selenium的一系列页面,并自行解析它们以处理漂亮的汤。 问题答案:

  • 最近我一直在用Python和靓汤学习网页刮刮乐。然而,当我试图刮下下面的页面时,我遇到了一点麻烦: http://www.librarything.com/work/3203347 我想从页面上得到的数据是这本书的标签,但我找不到任何方法来获取数据,尽管我花了很多时间在网上拖网。 我试着在网上看了几本指南,但似乎没有一本奏效。我尝试将页面转换为XML和JSON,但仍然找不到数据。 我现在有点手足无

  • 我正在抓取这个网页的用户名,在滚动后加载用户 指向页面的Url:“http://www.quora.com/Kevin-Rose/followers" 我知道页面上的用户数(本例中的用户数为43812),如何滚动页面直到加载所有用户?我在互联网上搜索过同样的代码,在任何地方我都能找到几乎相同的代码行: driver.execute_script("window.scroll至(0)") 如何确定垂

  • 我最近问了一个问题(这里引用:Python Web Scring(Beautiful Soup、Selenium和PhantomJS):只刮整页的一部分),这有助于确定我在滚动时动态更新的页面上刮所有内容时遇到的问题。然而,我仍然无法使用selenium来使用代码指向正确的元素,并迭代地向下滚动页面。我还发现,当我手动向下滚动页面时,有一些原始内容在页面加载时消失,而新内容则更新。例如,看下面的图

  • 最近,我一直试图从一个网站上获取大量的定价,从一个页面开始,每个项目的页面都链接到起始页面。我希望运行一个脚本,允许我单击某个项目的框,删除该项目的定价和描述,然后返回起始页并继续该循环。然而,有一个明显的问题,我在刮掉第一件物品后遇到了。返回起始页后,容器没有定义,因此出现了一个陈旧的元素错误,该错误会中断循环并阻止我获取其余的项。这是我使用的示例代码,希望能够一个接一个地刮去所有项目。 然而,