数据蛙数据分析每周作业

爬虫实战:爬取国外慈善基金会数据

2018-12-24  本文已影响14人  王阿根

数据地址

基金会列表url:https://www.charitywatch.org/top-rated-charities

第一家基金会url:https://www.charitywatch.org/ratings-and-metrics/naacp-legal-defense-and-educational-fund/18

该篇文章是跟着视频教程边学边做的,所有代码都可以运行得通,只不过后面for循环的地方太慢了。

爬虫准备

HTML内容

该网页的HTML信息都存储到了soup变量中,下面解释一下HTML里的一些内容:

比如说,“<td><a href="ratings-and-metrics/national-urban-league-national-office/19">National Urban League(National Office)</a></td>

1. 其中‘href’ 是标签‘a’ 的属性,参数‘href’ 给出的是与将要跳转的网页地址的相关信息,也就是该家基金会的详细信息网页,在“ratings-and-metrics/national-urban-league-national-office/19”前面加上https://www.charitywatch.org/”。

2.<a ***>National Urban League(National Office)</a> 这个段落包含的是该基金会的名称,也是重要信息。

爬虫思路

1.先通过基金会列表页面,取一家基金会为样例,爬取其详细网页信息与该基金会名称

2.根据获取的基金会详细信息网页地址,进入这个网页,抓取需要的具体expenses信息

从基金会列表页面搜集详细信息页资料:

我们看到,HTML对应的基金会列表代码,是在一个<div class="small-12 medium-8 column" id="results">的结构中,div是这个结构的标签,class, id是它的属性。

那么该怎样定位呢?

我们可以沿着层次树桩结构,比如head->body->div->.,也可以根据标签的一些特性,直接定位,比如div标签中的参数id内容是results,这一页只有一个id='results',的标签,那么参数id就可以直接定位了。

beautifulsoup中 find_all既可以直接定位标签(find_all(div)),也可以搜索满足参数条件的内容来定位比如,id = 'results’,这里的id参数内容是results。

或者采用下面这个方法取出所有的a标签:

通过拼接,获取某一家基金会的链接地址

爬取该基金会详情页的信息:

找到我们要定位的信息位置:

代码部分

将基金会名车和花费做成dict赋值给results:数据一直在爬,这里只显示了7个

将结果results保存成CSV格式:

整个爬虫就完成了!

上一篇 下一篇

猜你喜欢

热点阅读