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

如何使用BeautifulSoup4、python和selenium循环页面?

江德海
2023-03-14

我对Python相当陌生,第一次使用漂亮的汤,尽管我对硒有一些经验。我试图刮一个网站(http://cbseaff.nic.in/cbse_aff/schdir_Report/userview.aspx)所有的从属关系号码。

问题是它们在多个页面上(1上有20个结果,总计:21000个结果)

所以,我希望在某种循环中刮这些,可以在下一个页面上迭代btn,网页的URL中的问题不会改变,因此没有模式。

好吧,为此我尝试过,谷歌表导入超文本标记语言/导入XML方法,但由于大规模的问题,它只是挂起。接下来,我尝试了python,并开始阅读关于使用python抓取的内容(我是第一次这样做:))这个平台上的一些人建议了一种方法

(Python请求/美化对分页的组访问)

我也在尝试做同样的事情,但几乎没有成功。

此外,要获取结果,我们必须首先使用关键字“a”查询搜索栏--

from bs4 import BeautifulSoup
from selenium import webdriver
from selenium.common.exceptions import NoSuchElementException
from selenium.webdriver.common.by  import By
import time

options = webdriver.ChromeOptions()
options.add_argument("headless")
driver = webdriver.Chrome(executable_path=r"C:\chromedriver.exe",options=options)

driver.get("http://cbseaff.nic.in/cbse_aff/schdir_Report/userview.aspx")
#click on the radio btn
driver.find_element(By.ID,'optlist_0').click()

time.sleep(2)

# Search the query with letter A And Click Search btn
driver.find_element(By.ID,'keytext').send_Keys("a")
driver.find_element(By.ID,'search').click()

time.sleep(2)

next_button = driver.find_element_by_id("Button1")
data = []
try:
    while (next_button):    
        soup = BeautifulSoup(driver.page_source,'html.parser')
        table = soup.find('table',{'id':'T1'}) #Main Table
        table_body = table.find('tbody') #get inside the body
        rows = table_body.find_all('tr') #look for all tablerow
        for row in rows:            
            cols = row.find_all('td')  # in every Tablerow, look for tabledata
                for row2 in cols:
                    #table -> tbody ->tr ->td -><b> --> exit loop. ( only first tr is our required data, print this)

我期望的最终结果是跨多个页面的所有从属关系编号列表。

共有1个答案

卢枫涟
2023-03-14

while循环中的代码进行了少量添加:

next_button = 1 #Initialise the variable for the first instance of while loop

while next_button:
    #First scroll to the bottom of the page
    driver.execute_script("window.scrollTo(0, document.body.scrollHeight);") 
    #Now locate the button & click on it
    next_button = driver.find_element(By.ID,'Button1')
    next_button.click()
    ###
    ###Beautiful Soup Code : Fetch the page source now & do your thing###
    ###
    #Adjust the timing as per your requirement
    time.sleep(2)

请注意,滚动到页面底部很重要,否则会弹出一个错误,声称按钮1元素隐藏在页脚下。因此,有了脚本(在循环的开始),浏览器将向下移动到页面的底部。在这里,它可以清楚地看到'Button1'元素。现在,找到元素,执行单击操作

 类似资料:
  • 问题内容: 我正在尝试从PGA.com网站上获取数据,以获取美国所有高尔夫球场的表格。在我的CSV表中,我想包括高尔夫球场的名称,地址,所有权,网站,电话号码。有了这些数据,我想对其进行地理编码并放入地图中,并在计算机上拥有本地副本 我利用Python和Beautiful Soup4提取了我的数据。到目前为止,我已经提取了数据并将其导入CSV,但是现在我遇到了从PGA网站上的多个页面抓取数据的问题

  • 问题内容: 下午全部。当前尝试使用Selenium Webdriver循环浏览页面上的链接列表。具体来说,它是单击链接,从所述页面上抓取一行文本以写入文件,然后返回,然后单击列表中的下一个链接。以下是我所拥有的: 运行时,它会转到初始页面,然后返回主页面,而不是应有的子页面。打印x,我可以看到它递增了三倍而不是一倍。此后它也崩溃。我已经检查了所有的xpath等,并确认列表中的链接数得到了正确的计数

  • raceback(最近的最后一次调用):File"/User/kaikeichan/Desktop/python_webpage/actionchain.py",第7行,在驱动程序=网络驱动程序中。Chrome(PATH)File"/Library/Framework/Python.framework/Versions/3.10/lib/python3.10/site-packages/selen

  • 我得到一个使用下面的代码的锚的列表,然后我想去每个链接。我想出了下面的代码,但是在第一个循环之后,我得到了以下异常 org.openqa.selenium.staleElementReferenceException:过时元素引用:元素未附加到页面文档(会话信息:Chrome=55.0.2883.87) 有没有办法做到这一点,而不需要每次返回页面?

  • 我有一个关于一些国家的下拉列表如下, 我想通过使用Selenium和Java将值US、CA、AF、AL、DZ、AS、AD发送到一个数组,循环它并打印。 我尝试了以下操作 这将打印美国,加拿大,阿富汗,阿尔巴尼亚等,但我想像美国CA AF AL DZ作为广告

  • 我目前正在尝试使用Selenium和python来实现一个过程的自动化,但我遇到了一个障碍。该列表是树下列表的一部分。我已经用以下xpath标识了树的基础 我正在尝试循环通过“项目”部分,但需要和点击任何与“输入”标签 由于某些原因。如果我使用下面这样的东西,click()将不起作用。它只有在我使用WebDriverWait时才起作用。我必须使用web驱动等待方法,任何时候,我需要点击页面上的东西