内容简介:初探python之做一个简单小爬虫
准备工作
初探python,这个文章属于自己的一个总结。所以教程面向 新手 ,无技术含量。
python环境 Linux 基本都有,Windows下官网也提供了便利的安装包,怎么安装配置网上有很多教程在此就不一一说明。
我使用的 python 版本为Python 3.6.4,后面的代码也是基于python3的。
分析需求
做一个小爬虫离不开获取网页内容和匹配存储内容,那么我们先装上python爬虫的老朋友requests:
pip install requests
再装上pymysql扩展,方便将匹配到的内容插入到 mysql 数据库中:
pip install pymysql
第一步:获取网页内容
在python中有意思的是你需要什么,就去import什么,不像 php 一样获取网页内容直接来个 file_get_contents
完事儿
废话不多说,贴出代码来看一下:
# -*- coding:utf-8 -*- # 加载 requests 模块 import requests # GET方式获取 Response 对象 response = requests.get('https://www.xxx.com/') if response: # 输出html代码到控制台 print(response.text) else: # 输出错误信息 print('requests error')
在python中缩进一定要严格,初学者(4个空格为语句块缩进)经常犯的错误是tab键和空间键混用,造成的缩进不一致。凡是报错信息看到:IndentationError: unexpected indent ,就是表示缩进不一致。
如果本身没有编码基础,那么我推荐你看一下python的基本概念: http://www.kuqin.com/abyteofpython_cn/ch04.html
如果已经有了编码基础但对缩进这方面没有深究,可以看python的缩进规范: http://www.kuqin.com/abyteofpython_cn/ch04s09.html
好,写完代码之后我们拿到控制台试一下,完美输出html代码
第二步:正则匹配内容
既然能够获取html代码,那我们就要找出需要的部分,这就用上了正则。Python 自1.5版本起增加了 re 模块,它提供 Perl 风格的正则表达式模式。具体细节可以在菜鸟教程中查看: http://www.runoob.com/python/python-reg-expressions.html ,话不多说再贴代码:
# -*- coding:utf-8 -*- # 加载 requests 模块 import requests # 加载 re 模块 import re response = requests.get('https://www.xxx.com/') # 正则匹配文本 match = re.findall(r'<p><!--markdown-->([\s\S]*?)</p>', response.text) if match: # 输出匹配的内容到控制台 print(match[0]) else: # 输出html代码到控制台 print(response.text)
注:原网址为随机一句文字显示,每刷新一次就会变化一次。
第三步:循环匹配并加入数据库中
首先我们把数据库和表做好,可以用 sql 语句创建:
CREATE DATABASE IF NOT EXISTS `sentence`; USE `sentence`; CREATE TABLE IF NOT EXISTS `sexy` ( `id` int(11) NOT NULL AUTO_INCREMENT, `content` varchar(50) NOT NULL, `datetime` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (`id`), UNIQUE KEY `content` (`content`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
这里将content设置为了UNIQUE KEY,是为了保证抓取到的内容不重复,如果有已存在的值便直接跳过
# -*- coding:utf-8 -*- # 加载 requests 模块 import requests # 加载 re 模块 import re # 加载 pymysql 模块 import pymysql # 打开数据库连接 db = pymysql.connect('127.0.0.1', 'root', 'root', 'sentence', charset='utf8') # 使用cursor()方法获取操作游标 cursor = db.cursor() #死循环到天长地久 while(True): response = requests.get('https://www.xxx.com/') # 正则匹配文本 match = re.findall(r'<p><!--markdown-->([\s\S]*?)</p>', response.text) if match: sql = "INSERT INTO `sexy` (`content`) VALUES ('%s')" % (match[0]) try: # 执行sql语句 cursor.execute(sql) # 提交到数据库执行 db.commit() except: # 如果发生错误则回滚 db.rollback() # 输出sql语句到控制台 print(sql) else: # 输出html代码到控制台 print(response.text)
运行演示:
数据库内容:
总结
python是个好东西,万物based on python。
感觉教程贴比较难写,每个地方都有细节,但如果讲细了文章又太繁琐不好取舍,向那些写文章易懂的入门教程的作者致敬。
注:由于原网址不方便公布,代码中的网址全部替换为了xxx.com。
本文由SangSir 创作,采用 知识共享署名4.0 国际许可协议进行许可
本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
产品经理手册(原书第4版)(白金版)
[美] 琳达·哥乔斯(Linda Gorchels) / 祝亚雄、冯华丽、金骆彬 / 机械工业出版社 / 2017-8 / 65.00
产品经理的职责起点是新产品开发,贯穿产品生命周期的全过程。本书按上下游产品管理进行组织。 在上游的新产品开发流程中,作者阐述了如何从市场、产品、行业、公司的角度规划企划方案,并获得老板、销售部、运营部的资源支持,推进新产品的项目流程,实现所有目标,制定和实施新产品发布。 下游产品的管理核心在于生命周期的管理,营销更是生命周期管理的重中之重。产品经理如何让产品满足客户需求,让客户获得对产......一起来看看 《产品经理手册(原书第4版)(白金版)》 这本书的介绍吧!
RGB转16进制工具
RGB HEX 互转工具
Base64 编码/解码
Base64 编码/解码