编写简单的Python网页爬虫

编写简单的网页爬虫

最近有个朋友在学写Python爬虫, 想问问我的经验, 正好之前写过, 就简单总结下, 原理并不复杂, 就是基于requestsregex正则一把梭, 可以应付不少静态网页了. 复杂的爬虫还是要用框架吧, pyspider等…

http://www.zuihaodaxue.com/zuihaodaxuepaiming2019.html

我们想爬取出以下的效果

1573388573574

分析页面结构

1573388664253

可以看到, 这个里面就是所有学校的信息了, <tbody class="hidden_zhpm" style="text-align: center;">(这里面就是我们想要的内容, 所有大学的信息)<tbody>

网页请求

我们先用request请求下, 注意设置超时时间timeout

提取有效信息

那么, 网页的所有文本内容都在r.text中了, 下面我们用正则regex库来提取刚刚提到括号中的文本, 存到了universitys_raw变量中

universitys_raw中已经存了所有学校的信息, 那么下一步就是提取出每一所学校的信息

1573389104945

上面浏览器按F12看到, 每所学校的信息格式如下:

但是经过我自己测试, 应该是由于requests 库没有渲染的缘故, 打印了universitys_raw, 发现request得到的格式如下:

因此对应的正则提取代码就变成:

最终就是要从外一层的tr标签中提取出红框里的信息

1573389783172

最终, university中存的内容类型以下格式['459', '黄山学院', '安徽', '26.3'], 写入即可

保存

  • 连接符

这里涉及到字符串的join函数, 是用逗号","来连接each_line中的每一个元素, 输入是个数组, 输出是个字符串.

  • 写入文件

此处还是用open函数,一般而言 ,有两种写法

模式

“a” 以“追加”模式打开, (从 文件末尾EOF 开始, 必要时创建新文件)
“a+” 以”读写”模式打开
“ab” 以”二进制 追加”模式打开
“ab+” 以”二进制 读写”模式打开

“w” 以”写”的方式打开
“w+” 以“读写”模式打开
“wb” 以“二进制 写”模式打开
“wb+” 以“二进制 读写”模式打开

最终代码

1573390437007