相关疑难解决方法(0)

单击Scrapy中的按钮

我正在使用Scrapy抓取网页.当您点击某个按钮时,我只需弹出一些我需要的信息(当然,点击后也会出现在HTML代码中).

我发现Scrapy可以处理的形式(如登录)如图所示这里.但问题是没有形式可以填写,所以这不是我需要的.

如何只需单击一个按钮,然后显示我需要的信息?

我是否必须使用像mechanize或lxml这样的外部库?

python web-crawler scrapy web-scraping

37
推荐指数
2
解决办法
4万
查看次数

用python和/或scrapy刮掉ajax网页

我想做的是从petitions.whitehouse.gov的一个或多个请愿书中删除请愿数据 - 姓名,城市,州,日期,签名号码.

我假设在这一点上python是可行的方法 - 可能是scrapy库 - 以及一些处理网站ajax方面的功能.这个刮刀的原因是这个请愿数据不向公众开放.

我是一个自由职业者的高科技记者,我希望能够给每个申请的数据转储到一个CSV文件,以便分析的人从各个国家谁签的状态的请愿书,并与多个上访的数据的数量,发现人数签署多份请愿书等,然后就请愿程序和数据本身的政治可行性做出一些结论.

在petitions.whitehouse.gov请愿书功能运行作为一个Drupal模块,和白宫开发商回答我的问题,要求在github https://github.com/WhiteHouse/petition/issues/44,他们是在一个API合作允许从模块访问请愿数据.但该API没有发布日期; 而这并没有解决目前petitions.whitehouse.gov上的请愿数据问题.

我已通过电子邮件向白宫和白宫开发人员发送电子邮件,声称我是一名自由撰稿人,并要求以某种方式访问​​数据.白宫数字战略办公室告诉我,"不幸的是,我们目前没有办法提供数据导出,但我们正在努力通过API开放数据." 白宫有一项"开放数据"倡议,但显然没有涵盖请愿数据.

隐私和服务条款:签署请愿书时几乎没有隐私.没有明确的服务条款可以解决这些数据的网络抓取问题.

做了什么: UNC的一些教师编写了(我假设的)一个python脚本来抓取数据,但是他们不想向我发布脚本,说他们还在努力.http://www.unc.edu/~ncaren/secessionists/他们确实向我发送了一份我特别感兴趣的一份请愿书的CSV数据转储.

我做了什么:我已经为此建立了一个github项目,因为我希望任何请愿数据抓取器对每个人都有用 - 请愿者自己,记者等 - 他们希望能够获得这些数据.https://github.com/markratledge/whitehousescraper

我没有使用python的经验,也没有使用shell脚本的经验,而我正在尝试做的事情显然超出了我的经验.

我运行了一个GUI脚本,每五秒左右向Web浏览器发送一个"空格键",这样就可以通过将浏览器文本剪切并粘贴到文本编辑器中来删除~10,000个签名.从那里,我可以使用grep和awk将文本处理成CSV格式.当然,这不太顺利; Chrome因页面大小而陷入困境,需要数小时才能获得这么多签名.

到目前为止我发现了:从我可以从其他SO问题和答案中收集到的内容,看起来Python和scrapy http://scrapy.org是避免浏览器问题的方法.但该页面使用ajax函数来加载下一组签名.看来这是一个"静态"的ajax请求,因为URL没有改变.

在Firebug中,JSON请求标头似乎有一个随机字符串,前面附有一个页码.这对于需要做什么有什么意义吗?脚本是否需要模拟并将其发送到Web服务器?

请求网址:https://petitions.whitehouse.gov/signatures/more/50ab2aa8eab72abc4a000020/2/50b32771ee140f072e000001请求网址:https://petitions.whitehouse.gov/signatures/more/50ab2aa8eab72abc4a000020/3/50b1040f6ce61c837e000006请求网址:https:/ /petitions.whitehouse.gov/signatures/more/50ab2aa8eab72abc4a000020/4/50afb3d7c988d47504000004

这是在页面上加载签名的JS函数:

(function ($) {
Drupal.behaviors.morePetitions = {
  attach: function(context) {
    $('.petition-list .show-more-petitions-bar').unbind();
    $(".petition-list .show-more-petitions-bar").bind('click',
      function () {
        $('.show-more-petitions-bar').addClass('display-none');
        $('.loading-more-petitions-bar').removeClass('display-none');

        var petition_sort = retrieveSort();
        var petition_cols = retrieveCols();
        var petition_issues = retrieveIssues();
        var petition_search = retrieveSearch();
        var petition_page = …
Run Code Online (Sandbox Code Playgroud)

python ajax scrapy web-scraping

6
推荐指数
1
解决办法
5248
查看次数

标签 统计

python ×2

scrapy ×2

web-scraping ×2

ajax ×1

web-crawler ×1