摘要:准备工作初探,这个文章属于自己的一个总结。所以教程面向新手,无技术含量。凡是报错信息看到,就是表示缩进不一致。注由于原网址不方便公布,代码中的网址全部替换为了。
准备工作
初探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/abyteofp...
如果已经有了编码基础但对缩进这方面没有深究,可以看python的缩进规范:http://www.kuqin.com/abyteofp...
好,写完代码之后我们拿到控制台试一下,完美输出html代码
既然能够获取html代码,那我们就要找出需要的部分,这就用上了正则。Python 自1.5版本起增加了 re 模块,它提供 Perl 风格的正则表达式模式。具体细节可以在菜鸟教程中查看:http://www.runoob.com/python/...,话不多说再贴代码:
# -*- coding:utf-8 -*- # 加载 requests 模块 import requests # 加载 re 模块 import re response = requests.get("https://www.xxx.com/") # 正则匹配文本 match = re.findall(r"([sS]*?)
", 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"([sS]*?)
", 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。
源码在Github中:https://github.com/st1ven/Pyt...,欢迎Star
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/41301.html
摘要:引言本文简单讲解一下的架构。没错,开源的通用提取器就是要集成到架构中,最看重的是的事件驱动的可扩展的架构。架构图就是针对特定目标网站编写的内容提取器,这是在通用网络爬虫框架中最需要定制的部分。 1. 引言 本文简单讲解一下Scrapy的架构。没错,GooSeeker开源的通用提取器gsExtractor就是要集成到Scrapy架构中,最看重的是Scrapy的事件驱动的可扩展的架构。除了...
摘要:而分配任务的是会员中心的爬虫罗盘,实现集中管理分布执行。开源即时网络爬虫项目同样也要尽量实现通用化。网址和提取规则本来应该硬编码到中的,现在隔离出来,由会员中心进行管理,那么就很容易做通用了。 showImg(https://segmentfault.com/img/bVyEnS); 1,引言 《Scrapy的架构初探》一文所讲的Spider是整个架构中最定制化的一个部件,Spider...
摘要:首先介绍是一个库,他提供了一组用来操纵的默认也就是无的,也可以配置为有有点类似于,但是官方团队进行维护的,前景更好。使用,相当于同时具有和的能力,应用场景会非常多。 首先介绍Puppeteer Puppeteer是一个node库,他提供了一组用来操纵Chrome的API(默认headless也就是无UI的chrome,也可以配置为有UI) 有点类似于PhantomJS,但Puppet...
摘要:获取获取上下文句柄执行计算销毁句柄除此之外,还可以使用意为在浏览器环境执行脚本,可传入第二个参数作为句柄,而则针对选中的一个元素执行操作。 我们日常使用浏览器或者说是有头浏览器时的步骤为:启动浏览器、打开一个网页、进行交互。 无头浏览器指的是我们使用脚本来执行以上过程的浏览器,能模拟真实的浏览器使用场景。 有了无头浏览器,我们就能做包括但不限于以下事情: 对网页进行截图保存为图片或 ...
摘要:,引言的架构初探一文讲解了的架构,本文就实际来安装运行一下爬虫。第一次运行的测试成功,接下来的工作接下来,我们将使用来实现网络爬虫,省掉对每个人工去生成和测试的工作量。,文档修改历史,首次发布 1,引言 《Scrapy的架构初探》一文讲解了Scrapy的架构,本文就实际来安装运行一下Scrapy爬虫。本文以官网的tutorial作为例子,完整的代码可以在github上下载。 2,运行环...
阅读 2792·2021-10-11 10:57
阅读 2400·2021-08-27 16:20
阅读 1383·2019-08-30 13:03
阅读 1562·2019-08-30 12:50
阅读 3335·2019-08-29 14:16
阅读 1560·2019-08-29 11:12
阅读 1612·2019-08-28 17:53
阅读 2892·2019-08-27 10:58