Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/362.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_Python 3.x_Web Scraping_Python Requests - Fatal编程技术网

Python 无法使用请求从网页获取指向下一页的其余名称

Python 无法使用请求从网页获取指向下一页的其余名称,python,python-3.x,web-scraping,python-requests,Python,Python 3.x,Web Scraping,Python Requests,我创建了一个脚本,用于从搜索框中的州省到阿拉巴马州以及国家到美国的不同名称。脚本可以解析第一页中的名称。但是,我不知道如何使用请求从下一页获得结果 这里有两个选项可以获取所有名称。选项一:使用此显示所有410,选项二:使用下一步按钮 我尝试过(能够从第一页抓取姓名): 如果有人提出任何基于硒的解决方案,我发现同样的方法已经成功了。但是,我不愿意走这条路: from bs4 import BeautifulSoup from selenium import webdriver from selen

我创建了一个脚本,用于从搜索框中的州省到阿拉巴马州以及国家到美国的不同名称。脚本可以解析第一页中的名称。但是,我不知道如何使用请求从下一页获得结果

这里有两个选项可以获取所有名称。选项一:使用此
显示所有410
,选项二:使用
下一步按钮

我尝试过(能够从第一页抓取姓名):

如果有人提出任何基于硒的解决方案,我发现同样的方法已经成功了。但是,我不愿意走这条路:

from bs4 import BeautifulSoup
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import Select
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

link = "https://cci-online.org/CCI/Verify/CCI/Credential_Verification.aspx"

with webdriver.Chrome() as driver:
    driver.get(link)
    wait = WebDriverWait(driver,15)

    Select(wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, "select[id$='Input4_DropDown1']")))).select_by_value("AL")
    Select(wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, "select[id$='Input5_DropDown1']")))).select_by_value("United States")
    wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, "input[id$='SubmitButton']"))).click()
    wait.until(EC.visibility_of_element_located((By.XPATH, "//a[contains(.,'show all')]"))).click()
    wait.until(EC.invisibility_of_element_located((By.XPATH, "//span[@id='ctl01_LoadingLabel' and .='Loading']")))
    soup = BeautifulSoup(driver.page_source,"lxml")
    for item in soup.select("table.rgMasterTable > tbody > tr a[title]"):
        print(item.text)
我如何使用“请求”模块从该网页中获取其余的名称,从而进入下一页


我发现问题在于链接是一个搜索下一页的javascript函数。通过使用BeautifulSoup请求所有这些链接,并在此帖子中应用selenium中的以下代码,您可以使用类rgPageNext执行元素a的代码:


使用代码执行此操作的第二种形式是获取元素类rgPagerLabel上的最大数量。但需要来自仅具有此类且仅获取数字的元素。然后单击“下一页”跳转到下一页。

首先,在网络面板打开的情况下,在chrome中单击该链接。然后查看请求的表单数据:

特别注意事件目标和事件参数。

接下来,检查下一个链接中的一个,它们将如下所示:

<a onclick="return false;" title="Go to page 2" class="rgCurrentPage" href="javascript:__doPostBack('ctl01$TemplateBody$WebPartManager1$gwpciPeopleSearch$ciPeopleSearch$ResultsGrid$Grid1$ctl00$ctl02$ctl00$ctl07','')"><span>2</span></a>

doPostBack参数包含在_EVENTTARGET和_EVENTARGUMENT中,其他所有参数都应该与您在网络中看到的内容相匹配(标题和表单数据)。


通过Charles或Fiddler代理请求将很有帮助,这样您可以并排比较请求。

尝试此
ctl01$TemplateBody$WebPartManager1$gwpciPeopleSearch$ciPeopleSearch$ResultsGrid$Grid1$ctl00$ctl03$ctl01$GoToPageTextBox:2
页面的有效负载中是否出现了各种文件的导出按钮显示搜索结果时搜索字段下方的格式?他们一次下载所有搜索结果,因此,您的目标可能不需要编码就可以实现,或者您可以将csv加载到pandas中并按照自己的意愿进行处理。
<a onclick="return false;" title="Go to page 2" class="rgCurrentPage" href="javascript:__doPostBack('ctl01$TemplateBody$WebPartManager1$gwpciPeopleSearch$ciPeopleSearch$ResultsGrid$Grid1$ctl00$ctl02$ctl00$ctl07','')"><span>2</span></a>