基本任务:
I 搭建python开发环境
II 写一个简单的网络爬虫,在某一个网站将一部小说各章节(一般是一个章节一个网页)粘贴到一个文本文件内。
1 首先了解几个概念
1.1 网络爬虫
网络爬虫是一个自动提取网页的程序,它为搜索引擎从万维网上下载网页,是搜索引擎的重要组成。
网络爬虫可以模拟浏览器浏览网页,自动批量下载网络资源(能够访问到的,放在网络服务器的文件)。
传统爬虫从一个或若干初始网页的URL开始,获得初始网页上的URL,在抓取网页的过程中,不断从当前页面上抽取新的URL放入队列,直到满足系统的一定停止条件。聚焦爬虫的工作流程较为复杂,需要根据一定的网页分析算法过滤与主题无关的链接,保留有用的链接并将其放入等待抓取的URL队列。然后,它将根据一定的搜索策略从队列中选择下一步要抓取的网页URL,并重复上述过程,直到达到系统的某一条件时停止。另外,所有被爬虫抓取的网页将会被系统存贮,进行一定的分析、过滤,并建立索引,以便之后的查询和检索;对于聚焦爬虫来说,这一过程所得到的分析结果还可能对以后的抓取过程给出反馈和指导。
在这里还是要推荐下我自己建的Python开发学习群:483546416,群里都是学Python开发的,如果你正在学习Python ,小编欢迎你加入,大家都是软件开发党,不定期分享干货(只有Python软件开发相关的),包括我自己整理的一份2018最新的Python进阶资料和高级开发教程,欢迎进阶中和进想深入Python的小伙伴
1.2 小说网站的基本结构
首页(总目录)→分类→小说目录页→小说各章节;
1.3 与网站的交互
通常都是用户通过浏览器(当IE)访问网站(网络上的服务器)。
浏览器:网址(href)、请求(requests)→网站服务器:响应(response)给浏览器→浏览器:缓存并呈现回复的内容。
1.4 开发环境
用高级语言写的代码需要解释或编码到机器代码,才能被计算机执行。
所以开发一个程序,最基本的需求是一个文本编辑器(写)和解释器或编译器。
开发复杂的程序,需要调试查错、需要引入第三方库,需要边结各文件,所以,一般来说,一个简单的文本编辑器加一个解释器或编译器是不够的,需要一个支持某种高级语言的调试器的较复杂的编辑器。这样的编辑器同时还支持可以方便写代码(如颜色分类显示、代码提示)的插件加入。
2 搭建python开发环境
2.1 下载和安装解释器python3.6
2.1.1 python解释器下载地址:https://www.python.org/downloads/release/python-365/
2.1.2 关于环境变量path,就是可以保证执行python命令时,不需要输入安装路径。在安装时如果有直接勾选了"add python to path"则在安装时即自动配置了path的安装路径;
path变量中有了安装路径后,即可直接在CMD中输入python,可以看到相关反馈相信,即表示安装和环境变量配置OK了;
如果不安装代码编辑器或专用IDE,也可以在CMD中输入python,进行交互式开发;
2.2 下载和安装代码编辑器加调试器:pycharm4
PyCharm 由著名的JetBrains公司开发,带有一整套可以帮助用户在使用Python语言开发时提高其效率的工 具,比如调试、语法高亮、Project管理、代码跳转、智能提示、自动完成、单元测试、版本控制。此外,该IDE提供了一些高级功能,以用于支持Django框架下的专业Web开发。
2.2.1 代码编辑器pycharm下载地址http://www.jetbrains.com/pycharm/download/#section=windows
2.2.2进入激活界面,选择第二个License server,之后在License server address中随意输入下面两个注册码中的任意一个即可,http://idea.liyang.io或http://xidea.online。
激活后的状态:
3 添加第三方模块
第三方模块添加工具pip必须在安装python3.5时有勾选安装。
编辑或新建C:Userswwuhnwu01pippip.ini:
[global]
respect-virtualenv = true
download-cache = f:/Python/pip/cache
log-file = f:/Python/pip/pip.log
[install]
timeout = 30
find-links = http://pypi.douban.com
find-links = http://pypi.douban.com/simple
pycharm→文件→setting→project interpreter→pip→右边加号+→manage repositories→右边加号+→添加第三方模块的镜像服务器http://pypi.douban.com/和http://pypi.douban.com/simple
如果还是连接不上第三方模块服务器,有时需要重启一下pycharm。
4 一个简单的网络爬虫
3.1 新建项目
3.2 设置项目编译器
基本的思路:
进入一个小说的目录页,请求到目录(包括各章节的href和章节标题)的内容,提取到全部的href,再通过各href请求到各网页的内容,经过数据清洗和适当的回到,写入到一个文本文件
代码:
以上代码运行后,即可把整部小说的内容写入文本文件。
不同的网站,内面内容的写法会有差别,在提取数据和清洗数据时要做相应调整变化。
一些网站会禁止爬虫,当你尝试爬取网站资源时,一些网站会有反爬策略,将你的IP加入黑名单,当你爬取或访问时,页面会响应为:“HTTP Error 403: Forbidden错误”。
附源代码:
import requests
import re
# 1 获取小说目录页
url = 'http://www.xiaoshuotxt.org/wuxia/1617/'
response = requests.get(url)
response.encoding = 'utf-8'
html = response.text
title = re.findall(r'
# 4 数据持久化,写入txt)
fb = open('%s.txt'%title, 'w', encoding='utf-8');
# 2 提取章节
menu = re.findall(r'正文(.*?)',html)[0]
chapter_info_list = re.findall(r'(.*?)',menu)
# 3 循环访问章节,并获取内容
for chapter_info in chapter_info_list:
chapter_url = chapter_info[0]
chapter_title = chapter_info[1]
if 'http' not in chapter_url:
chapter_url = 'http://www.xiaoshuotxt.org%s' % chapter_url
chapter_response = requests.get(chapter_url)
chapter_response.encoding = 'utf-8'
chapter_html = chapter_response.text
# 数据提取
chapter_content = re.findall(r'
# 数据清洗(按页面规律)
chapter_content = chapter_content.replace(' ','')
chapter_content = chapter_content.replace('
','')
# 数据持久化(写入txt),先要在前面新建文件
fb.write(chapter_title)
fb.write(' ')
fb.write(chapter_content)
fb.write(' ')
#用以下语句可以看到动态过程
print(chapter_url)
-End-