帮粉丝写Python爬虫之【河北单招学校信息爬虫】

154 阅读4分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第20天,点击查看活动详情

帮粉丝写爬虫第一篇,接到一个简单的任务,让我爬取一下河北单招学校相关的信息,那最后这10篇博客,第一篇就从这里开始吧。(其实写到现在,我甚至想继续写下去了,没准能凑个爬虫108篇~哈哈哈) 当我把源码发给他的时候,以下是对话内容,“这就完啦?!”,“啊,不然呢?”

写在前面

首先介绍下这种爬虫其实属于定向爬虫的一种,就是指定要获取某些特定的数据,例如本案例中的河北单招学校信息,由于并没有描述必须去爬取哪个网站或者获取哪些数据,对于爬虫编写者来说,扩展点和突破点都比较多了,可以自由的去查找相应的资源,不用太局限,当然难点也是存在的,就是翻来翻去找不到合适爬取的网址,还不如直接给一个网站,说:就爬取这个呢

话不多说,经过我的一番查找,最终还是搜到了一个我觉得还不错,并且还能写一些独特爬虫知识点的网站。所谓独特就是一个爬虫的小窍门,几行代码就获取到你想要的数据。

待爬取的网站网页: www.hbdzxx.com/news/2015/1… ,数据全,而且页面恰好是一个表格,妙啊,正好能用一个以前没讲过的爬虫技巧。

image.png

编码开始

本篇博客其实用到的是pandas库解析网页,很多人可能开始好奇了,pandas不是用来做数据分析的吗?为何还可以用到爬虫里面。

没错,这就要说一个特殊情况下,我们用爬虫要做的事情了,安装pandas库之后,pandas具备一个read_html的方法,没错,看到你就知道了,这货是用来读取网页的,当然关于pandas我还写了一个专栏,你可以去详细学习,当然目前进展到第12篇,还有10多篇需要继续写啦。 blog.csdn.net/hihell/cate…

read_html函数说明

该函数可以配置的参数还蛮多的,常用的如下,在本例中除了header,其它没有使用到,了解一下就可以了。

  • io:可以是url、html文本、本地文件等
  • flavor:解析器
  • header:标题行
  • skiprows:跳过的行
  • attrs:属性,比如 attrs = {'id': 'table'};
  • parse_dates:解析日期

其它的参数说明可以参考:pandas.pydata.org/pandas-docs…

估计还是有点模糊,例如我举个例子,gov的网站其实蛮多表格的,例如石家庄统计局的 tjj.sjz.gov.cn/col/1584345…

Python爬虫入门教程 91-100 帮粉丝写Python爬虫之【河北单招学校信息爬虫】

这个页面我怎么用三行代码爬取呢?很简单

import pandas as pd
url = 'http://tjj.sjz.gov.cn/col/1584345166496/2020/09/07/1599460807453.html'
tb = pd.read_html(url)
print(tb)

注意这样子把网页所有的表格都爬取到了,你还要稍微处理下,知道哪些是自己想要的数据,简单修改如下,OK,拿数据走人,当然写个循环,存个csv文件这些都是small case了。

import pandas as pd
url = 'http://tjj.sjz.gov.cn/col/1584345166496/2020/09/07/1599460807453.html'
tb = pd.read_html(url)[3]
print(tb)

保存文件,还要过滤下列标题,代码如下

import pandas as pd
url = 'http://tjj.sjz.gov.cn/col/1584345166496/2020/09/07/1599460807453.html'
tb = pd.read_html(url,header=0)[3]
# 直接存储
tb.to_csv('data.csv')

最终获取到的数据如下 Python爬虫入门教程 91-100 帮粉丝写Python爬虫之【河北单招学校信息爬虫】

爬取河北单招学校信息

有上述基础,这个爬取起来就非常简单了,但是当你直接输入网址爬取,发现被403禁止访问了,估计是反爬了,切换下思路,配合一下requests模块,事情就变的简单了~

import pandas as pd
import requests
url = 'http://www.hbdzxx.com/news/2015/1.html'
r = requests.get(url)
r.encoding = "gb2312"
try:
    tb = pd.read_html(r.text,header=0)[0]
    # 直接存储
    tb.to_csv('school.csv')
except Exception as e:
    print(e)

image.png

写在后面

写完代码之后,尝试使用了一下新的代码库 https://codechina.csdn.net/ ,虽然不晓得为啥造了一个github的轮子,估计是担心有一天我们访问不了github吧,奇怪和看不懂的规划(希望有好的破局点吧),好了,数据爬取到了,帮粉丝写爬虫第一篇顺利交稿。

广宣时间

如果你想跟博主建立亲密关系,可以“梦想橡皮擦”,近距离接触一个逗趣的互联网高级网虫。 博主 ID:梦想橡皮擦,希望大家点赞、评论、收藏。

【帮粉丝写爬虫】会成为这个系列的最后10篇内容,如果你有想要爬取的网站,在评论区告诉我吧