首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何抓取分页页面?单击下一页时,不会更改url。

如何抓取分页页面?单击下一页时,不会更改url。
EN

Stack Overflow用户
提问于 2016-02-25 14:55:33
回答 2查看 2.2K关注 0票数 4

我使用python3.5和window10。

当我抓取一些页面时,我通常使用urlopen和'for‘迭代的url更改。就像下面的代码。

代码语言:javascript
复制
from bs4 import BeautifulSoup

import urllib
f = open('Slave.txt','w')

for i in range(1,42):
 html = urllib.urlopen('http://xroads.virginia.edu/~hyper/JACOBS/hjch'+str(i)+'.htm')
 soup = BeautifulSoup(html,"lxml")
 text = soup.getText()
 f.write(text.encode("utf-8"))

f.close()

但是,我遇到了麻烦,因为url没有改变,尽管我点击了下一页,网页内容被改变了,比如图片。url没有变化,也没有模式。enter image description here

在url中没有我可以捕捉到网站变化的信号。

http://eungdapso.seoul.go.kr/Shr/Shr01/Shr01_lis.jsp

网站在这里,我发现的线索是在分页类中。我找到了一些转到下一页的链接,但我不知道如何在Beautifulsoup中使用这个链接。我认为commonPagingPost是由开发人员定义的函数。

代码语言:javascript
复制
<span class="number"><a href="javascript:;" 
class="on">1</a>&nbsp;&nbsp;
<a href="javascript:commonPagingPost('2','10','Shr01_lis.jsp');">2</a>&nbsp;&nbsp;
<a href="javascript:commonPagingPost('3','10','Shr01_lis.jsp');">3</a>&nbsp;&nbsp;
<a href="javascript:commonPagingPost('4','10','Shr01_lis.jsp');">4</a>&nbsp;&nbsp;
<a href="javascript:commonPagingPost('5','10','Shr01_lis.jsp');">5</a></span>

如何使用beutifulSoup4打开或抓取所有这些站点?当我使用urlopen时,我只能得到第一个页面。

EN

回答 2

Stack Overflow用户

发布于 2016-02-27 05:54:45

你不能单独使用be做到这一点,因为它不支持ajax。你需要使用像seleniumghost.py或者其他支持javascript的网络浏览器。

使用这些库,您将能够模拟单击这些链接,然后抓取新加载的内容。

票数 0
EN

Stack Overflow用户

发布于 2016-04-29 21:38:16

我搜索了commonPagingPost的代码,找到了下面的JavaScript函数定义:

代码语言:javascript
复制
function commonPagingPost (Page, Block, Action) {
                var Frm = document.mainForm;
                Frm.RCEPT_NO.value = "";
                Frm.page.value = Page;
                Frm.action = Action;
                Frm.submit ();
}

所以它所做的就是填写"mainForm“并提交它。mainForm是什么样子的?

代码语言:javascript
复制
<form name="mainForm" method="post" action="">
                <input type="hidden" name="RCEPT_NO" value="">
                <input type="hidden" name="search_flag" value="N">
                <input type="hidden" name="page" value="1">
</form>

好的,该函数填充一个表单,将目标页面设置为“Shr01_lis.jsp”,与您试图抓取的页面相同。我们可以在Python中做到这一点吗?是!

代码语言:javascript
复制
import requests

r = requests.post(
    "http://eungdapso.seoul.go.kr/Shr/Shr01/Shr01_lis.jsp",
    data={
        "RCEPT_NO": "",
        "search_flag": "N",
        "page": "5"
    })

soup = BeautifulSoup(r.text, 'lxml')

我更喜欢requests而不是urllib,因为对于POST请求,请求更容易处理。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35620390

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档