使用来自JS生成内容的Python3刮取数据

时间:2016-10-27 17:51:27

标签: web-scraping python-3.5

我需要从python3程序中搜索一个网站(比如说#34; www.example.com"),该程序的表单包含两个元素,如下所示:

1: Textbox
2: Dropdown

需要运行具有多个选项的查询(例如,' abc'和#39; 1)以上述形式填写/选择并刮取由此生成的页面。填写表单并提交后生成的页面有一个URL,如浏览器中所示" www.example.com/abc/1"。此页面上的结果通过javacript获取,因为可以验证在页面源中。以下相关javascript的概要:

<script type="text/rfetchscript">
$(document).ready(function(){
$.ajax({
url: "http://clients.example.com/api/search",
data: JSON.parse('{"textname":"abc", "dropval":"1"}'), 
method: 'POST',
dataType: 'json',
       Logic to fetch the data
</script>

我试图通过使用请求方法获取页面结果,urllib:

1:     resp = requests.get(&#39; http://www.example.com/abc/1&#39;)

2:     req = urllib.request.Request(&#39; http://www.example.com/abc/1&#39;)     x = urllib.request.urlopen(req)
    SourceCode = x.read()

3:还尝试了scrapy。

但以上所有内容仅返回静态数据,如&#34; view page source&#34;中所示,而不是浏览器中可见的实际结果。

在这里寻求正确方法的帮助。

1 个答案:

答案 0 :(得分:0)

使用urllib或请求抓取页面只会返回页面源,因为它无法执行服务器返回的javascript代码等。如果您想像浏览器一样加载内容,则必须使用selenium和可选的chrome或firefox驱动程序。如果您想继续使用urllib或请求,您必须找出网站加载的内容页面,例如Chrome浏览器中的网络选项卡。可能您感兴趣的数据是从json文件加载的。