我正在尝试从this website.
中删除数据有一个表格列出了不同的组织,每个组织的名称都是指向网页的链接,其中包含有关该组织的更多信息。
这些链接不是硬编码的超链接,而是调用javascript函数,该函数在调用函数时计算。
<a href="javascript:view_ngo('4309','','1','0')" class="bluelink11px">
BISWASUK SEVASRAM SANGHA
</a>
因此,仅通过链接来删除信息是不可能的。
是否有任何解决方法来执行javascript函数并获取生成的网页的HTML?我正在使用Python 3,并使用Beautiful Soup作为网络刮刀。
答案 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))