如何在网络抓手中获取POST请求的结果?

时间:2016-08-08 10:59:35

标签: python python-3.x web-scraping beautifulsoup

我正在尝试从this website.

中删除数据

有一个表格列出了不同的组织,每个组织的名称都是指向网页的链接,其中包含有关该组织的更多信息。

这些链接不是硬编码的超链接,而是调用javascript函数,该函数在调用函数时计算。

<a href="javascript:view_ngo('4309','','1','0')" class="bluelink11px">

BISWASUK SEVASRAM SANGHA    

</a>

因此,仅通过链接来删除信息是不可能的。

是否有任何解决方法来执行javascript函数并获取生成的网页的HTML?我正在使用Python 3,并使用Beautiful Soup作为网络刮刀。

1 个答案:

答案 0 :(得分:0)

首先,javascript不会执行服务器端,但始终是客户端。在这里,您应该只使用调试工具或浏览器(Firefox功能F12就足够了)来查看单击其中一个链接时会发生什么。您立即看到javascript代码只准备并发送POST请求

因此view_ngo(a, b, c, d)生成以下POST请求:

POST http://ngo.india.gov.in/view_ngo_details_ngo.php

使用以下数据:

ngo_id=a&records_no=b&page_no=c&page_val=1&issueid=&ngo_black=d&records=

您还可以看到它使用会话Cookie,因此您应该在抓取代码中对其进行处理。

刮痧可能就像:

cookieProcessor = urllib.request.CookieProcessor()
opener = urllib.request.build_opener(cookieProcessor)
soup = BeautifulSoup(opener.open(
        'http://ngo.india.gov.in/sector_ngolist_ngo.php?psid=&records='))

# find the relevant links and iterate through them for view_ngo(a, b, c, d)

    data = urllib.parse.urlencode({'ngo_id': a, 'records_no': b, 'page_no': c,
        'page_val': '1', 'issue_id':'', 'ngo_black':d, 'records_no':'' }).encode()
    soup2 = BeautifulSoup(opener.open('http://ngo.india.gov.in/view_ngo_details_ngo.php',
        data))