将数据从一个页面刮到下一个页面,依此类推,javascript在网站上使用

将数据从一个页面刮到下一个页面,依此类推,javascript在网站上使用,javascript,python,selenium,web-scraping,beautifulsoup,Javascript,Python,Selenium,Web Scraping,Beautifulsoup,我尝试了许多不同的网络抓取途径,希望在这里得到一些帮助。我有一些Python代码,可以从我的网站的第1页得到我想要的东西 response = requests.get(url) soup = BeautifulSoup(r.text, 'html.parser') results = soup.find(id='preblockBody') results print(results.prettify()) job_elems = results.find_all('table', clas

我尝试了许多不同的网络抓取途径,希望在这里得到一些帮助。我有一些Python代码,可以从我的网站的第1页得到我想要的东西

response = requests.get(url)

soup = BeautifulSoup(r.text, 'html.parser')
results = soup.find(id='preblockBody')
results
print(results.prettify())
job_elems = results.find_all('table', class_='pbListingTable')
for job_elem in job_elems:
    title_elem2 = job_elem.find_all('tr', class_='pbListingTable1')
for pbListingTable1 in job_elem.find_all('tr', {'class':'pbListingTable1'}):
    print(pbListingTable1.text)
    title_elem = job_elem.find_all('tr', class_='pbListingTable0')
for pbListingTable0 in job_elem.find_all('tr', {'class':'pbListingTable0'}):
    print(pbListingTable0.text)
然后,我想进入下一页,做同样的事情,在所有页面中循环,直到最后,并结合所有内容。但是,我遇到了一些问题,因为下一页操作是在javascript中进行的,如下所示:

在进一步检查该网站后,我发现行动是:

<script language="JavaScript">
function sortPage(i) {
document.location = baseHref + "website" + i;
}
function gotoNextPage(i) {
document.location = baseHref + "website" + i;
}

功能分类页(一){
document.location=baseHref+“网站”+i;
}
函数gotoNextPage(i){
document.location=baseHref+“网站”+i;
}
我对这一切还不太熟悉,所以我被卡住了。非常感谢您的指导。如何进入下一页,循环浏览所有页面,然后合并?

这有帮助吗

from selenium import webdriver
from webdriver_manager.firefox import GeckoDriverManager
driver = webdriver.Firefox()


driver.get(url)

##your code goes here##

nxt=driver.find_element_by_xpath("//a[contains(@href, 'gotoNextPage(2)')]")
driver.execute_script("arguments[0].click();", nxt)

再次感谢大家的建议,我已经用Selenium重写了,现在我只希望得到一些帮助,可以在所有页面中循环并附加到单个输出中。这是我的密码:

table = driver.find_element_by_id('preblockBody')

job_elems = table.find_elements_by_xpath("//*[contains(@class,'pbListingTable')]")
for value in job_elems:
    print(value.text)

nxt=driver.find_element_by_xpath("//a[contains(@href, 'gotoNextPage(2)')]")
driver.execute_script("arguments[0].click();", nxt)

您可能需要查看Selenium来处理JS。如果您共享
url
,并告诉我们您的预期输出,那将非常好。谢谢您,不幸的是url需要凭据,所以我也找到了这一部分,但我无法共享。网页像表格一样设置,从我共享的代码中,你可以看到我正在从表格中查找行,并获取所有信息。我想对所有页面都这样做。单击就是单击。。。只需点击链接。“//a[contains(@href,'gotoNextPage(2)]”的XPATH应该可以工作。使用浏览器开发工具观察网络流量,并在单击下一页时观察它发送给您的URL。模拟当您按下“下一页”时它发出的请求。这看起来是正确的,但不确定您为什么不使用nxt。单击()而不是执行脚本。您可以通过使用一个简单的“for”循环并使用gotoNextPage部分的索引在这里循环。。。因此,对于“2”,使用for循环的索引。您还可以使用Seleniums“findElements”返回与包含“gotoNextPage”的xpath匹配的元素数组,并对其进行迭代。如果DOM是通过javascript更新的,WebDriverWaits会有所帮助。这是有道理的,但我正在努力让它工作。如何开始,我可以在“gotoNextPage”的末尾添加类似[I]的内容并循环使用吗?是的。。。使用适当的报价。。我会发布一个示例,但我不懂Python。您还可以使用findelelements获取元素数组,并在每次单击和运行任何操作后仅获取数组的索引。。。(如果javascript创建了这些按钮,那么WebDriverWaits和捕捉StaleElement异常会变得更复杂一些,以确保捕捉到完整的数组)我理解你的意思,但我对Python有点陌生,无法很好地执行……我会看看我能找到什么