Python的爬虫框架主要可以分为以下五个部分:

爬虫调度器:用于各个模块之间的通信,可以理解为爬虫的入口与核心(main函数),爬虫的执行策略在此模块进行定义;

URL管理器:负责URL的管理,包括带爬取和已爬取的URL、已经提供相应的接口函数(类似增删改查的函数)

网页下载器:负责通过URL将网页进行下载,主要是进行相应的伪装处理模拟浏览器访问、下载网页

网页解析器:负责网页信息的解析,这里是解析方式视具体需求来确定

信息采集器:负责将解析后的信息进行存储、显示等处理


代码示例是爬取CSDN博主下的所有文章为例,文章仅作为笔记使用,理论知识rarely

一、信息采集器简介

       信息采集器的功能基本是将解析后的信息进行显示、存储到本地磁盘上。   

       信息采集器也许名字并不正确,自己突发奇想来的。我对解析器和采集器的区分不是很明确,在下面的示例中可能在采集器中依然进行了网页解析,主要原因在于对python的基本语法不熟,有些数据统一处理还不会,只能边解析边存储了。

二、信息采集器示例:(爬取CSDN博主下的所有文章

# author : s260389826
# date : 2019/3/22
# position: chengdu from fake_useragent import UserAgent
import urllib.request as request
from bs4 import BeautifulSoup
import urllib.parse
import os
import tomd class HtmlOutputer(object): # Replace deny char, used to name a directory.
def replace_deny_char(self, title):
deny_char = ['\\', '/', ':', '*', '?', '\"', '<', '>', '|', ':']
for char in deny_char:
title = title.replace(char, ' ')
print('Article\'title is: %s' % title)
return title def img_download(self, img_url, directory, n):
opener = urllib.request.build_opener()
opener.addheaders = [('User-agent', str(UserAgent().random))]
urllib.request.install_opener(opener)
try:
img_name = '%s\%s.jpg' % (directory, n)
if os.path.exists(img_name) is True:
return
request.urlretrieve(img_url, img_name)
print('图片%d下载操作完成' % n)
except Exception as e:
print(e) def collect(self, author, seq, html): soup = BeautifulSoup(html,'html.parser', from_encoding='utf-8') try:
# <h1 class="title-article">Windos下通过Wpcap抓包实现两个网卡桥接</h1>
article_title = soup.find('h1',attrs={'class': "title-article"}).text # 获取文章标题 print(soup.h1.text) # <span class="time">2018年12月18日 16:43:02</span>
# article_time = soup.find('span',attrs={'class': "time"}).text # 获取文章时间
# assert isinstance(article_time, object) # <span class="read-count">阅读数:104</span>
# article_readcnt= soup.find('span', attrs={'class': "read-count"}).text # 获取文章阅读量
# print(article_title, article_time, article_readcnt) except AttributeError as e:
#print(e.reason)
return article_title_convert = self.replace_deny_char(article_title)
directory = "F:\python\CSDN\\blog\%s\%d.%s" % (author, seq, article_title_convert)
if os.path.exists(directory) is False:
os.makedirs(directory) # download blog'imgs:
# <div id="article_content">
imgs = soup.find('div', attrs={'id' : "article_content"}).findAll('img') if len(imgs) > 0:
count = 0
for img in imgs:
count = count + 1
# print(img.attrs['src'])
self.img_download(img.attrs['src'], directory, count) # down blog's ariticles: 如果要保存文件,需要将注释打开
'''
article = soup.find('div', attrs={'id' : "article_content"})
md = tomd.convert(article.prettify())
try:
with open('%s\%s.md' % (directory, article_title_convert), 'w', encoding='utf-8') as f:
f.write(md)
except FileNotFoundError as e:
print("No such file or directory: %s\%s" % (directory, article_title_convert))
'''

三、上述代码用到的知识点:

1. 对系统目录及文件的处理:

directory = "F:\python\CSDN\\blog\s2603898260"
if os.path.exists(directory) is False: # 如果该目录不存在
os.makedirs(directory) # 则进行创建目录 file_name = "F:\python\CSDN\\blog\s2603898260\log.txt"
if os.path.exists(file_name) is True: # 如果该文件存在
return # 不需要重新下载,直接返回

2. 特殊字符不能做文件名处理:

    # Replace deny char, used to name a directory.
def replace_deny_char(self, title):
deny_char = ['\\', '/', ':', '*', '?', '\"', '<', '>', '|', ':']
for char in deny_char:
title = title.replace(char, ' ')
print('Article\'title is: %s' % title)
return title

3. 根据URL下载图片:

request.urlretrieve(img_url, img_name)  # 根据img_url 下载图片到本地img_name(完整目录+图片名.格式)

   def img_download(self, img_url, directory, n):
opener = urllib.request.build_opener()
opener.addheaders = [('User-agent', str(UserAgent().random))]
urllib.request.install_opener(opener)
try:
img_name = '%s\%s.jpg' % (directory, n)
if os.path.exists(img_name) is True:
return
request.urlretrieve(img_url, img_name)
print('图片%d下载操作完成' % n)
except Exception as e:
print(e)

4. tomd插件:

作用就是将html格式转换为td的格式。没理解错就是它:

不是很懂,我的下载转换效果也不是很好,

直接附链接:https://github.com/gaojiuli/tom

以及阅读td文件的链接:http://markdownpad.com/download.html

python3 爬虫五大模块之五:信息采集器的更多相关文章

  1. python3 爬虫五大模块之三:网页下载器

    Python的爬虫框架主要可以分为以下五个部分: 爬虫调度器:用于各个模块之间的通信,可以理解为爬虫的入口与核心(main函数),爬虫的执行策略在此模块进行定义: URL管理器:负责URL的管理,包括 ...

  2. python3 爬虫五大模块之二:URL管理器

    Python的爬虫框架主要可以分为以下五个部分: 爬虫调度器:用于各个模块之间的通信,可以理解为爬虫的入口与核心(main函数),爬虫的执行策略在此模块进行定义: URL管理器:负责URL的管理,包括 ...

  3. python3 爬虫五大模块之一:爬虫调度器

    Python的爬虫框架主要可以分为以下五个部分: 爬虫调度器:用于各个模块之间的通信,可以理解为爬虫的入口与核心(main函数),爬虫的执行策略在此模块进行定义: URL管理器:负责URL的管理,包括 ...

  4. python3 爬虫五大模块之四:网页解析器

    Python的爬虫框架主要可以分为以下五个部分: 爬虫调度器:用于各个模块之间的通信,可以理解为爬虫的入口与核心(main函数),爬虫的执行策略在此模块进行定义: URL管理器:负责URL的管理,包括 ...

  5. python3爬虫lxml模块的安装

    1:在下载lxml之前,要先查看python的版本信息, 在CMD命令行输入python 再输入import pip; print(pip.pep425tags.get_supported()) -- ...

  6. [实战演练]python3使用requests模块爬取页面内容

    本文摘要: 1.安装pip 2.安装requests模块 3.安装beautifulsoup4 4.requests模块浅析 + 发送请求 + 传递URL参数 + 响应内容 + 获取网页编码 + 获取 ...

  7. Python3爬虫系列:理论+实验+爬取妹子图实战

    Github: https://github.com/wangy8961/python3-concurrency-pics-02 ,欢迎star 爬虫系列: (1) 理论 Python3爬虫系列01 ...

  8. python基础系列教程——Python3.x标准模块库目录

    python基础系列教程——Python3.x标准模块库目录 文本 string:通用字符串操作 re:正则表达式操作 difflib:差异计算工具 textwrap:文本填充 unicodedata ...

  9. Python3:Requests模块的异常值处理

    Python3:Requests模块的异常值处理 用Python的requests模块进行爬虫时,一个简单高效的模块就是requests模块,利用get()或者post()函数,发送请求. 但是在真正 ...

随机推荐

  1. 爱了,字节跳动大神最佳整理:582页Android NDK七大模块学习宝典,理论与实践

    前言 时至今日,短视频App可谓是如日中天,一片兴兴向荣.随着短视频的兴起,音视频开发也越来越受到重视,而且薪资水涨船高,以一线城市为例,音视频工程开发的薪资比Android应用层开发高出40%. 但 ...

  2. Quartz 实现同一辅助类 重复开启多任务

    前言: 最近做一个项目,需要用到定时任务,第一就想到了Quartz,然后很开心的就实现了功能,但是后来发现一个问题,如果需要开启多个定时任务,需要写多个辅助类,而辅助类里面的功能基本差不多,这是我就想 ...

  3. [SQL]修改和删除基本表

    修改基本表 SQL语言用alter table语句修改基本表,其一般格式如下: alter table <表名> add <列名> <数据类型> [<列级完整 ...

  4. 使用AVPro Video在Unity中播放开场视频(CG)笔记

    游戏中的开场CG(播放视频),采用的插件为AVPro Video1.x(和W的版本一致),Unity版本为2018.4.0f1 Asset Store:AVPro Video - Core Andro ...

  5. 痞子衡嵌入式:在IAR开发环境下将关键函数重定向到RAM中执行的三种方法

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是在IAR开发环境下将关键函数重定向到RAM中执行的三种方法. 嵌入式项目里应用程序代码正常是放在 Flash 中执行的,但有时候也需要将 ...

  6. 算法竞赛中的常用JAVA API :HashMap 和 TreeMap(转载)

    算法竞赛中的常用JAVA API :HashMap 和 TreeMap 摘要 本文主要介绍Map接口下的HashMap和TreeMap. HashMap HashMap是基于哈希表的 Map 接口的实 ...

  7. 搭建riscv环境

    1.第一步 clone 需要的源文件(sudo apt install git   如果你没有git)  以下都是给予ubuntu18.04 $ git clone --recursive https ...

  8. SQL 练习16

    按平均成绩从高到低显示所有学生的所有课程的成绩以及平均成绩 SELECT * from SC LEFT JOIN (SELECT sid,AVG(score) 平均成绩 from SC GROUP B ...

  9. 《手把手教你》系列技巧篇(二十)-java+ selenium自动化测试-元素定位大法之终卷(详细教程)

    1.简介 这篇文章主要是对前边的文章中的一些总结和拓展.本来是不打算写着一篇的,但是由于前后文章定位元素的时间有点长,怕大家忘记了,就在这里简单做一个总结和拓展. 2.Selenium八种定位方式 S ...

  10. NOIP 模拟 $38\; \rm c$

    题解 \(by\;zj\varphi\) 发现就是一棵树,但每条边都有多种不同的颜色,其实只需要保留随便三种颜色即可. 直接点分治,将询问离线,分成一端为重心,和两端都不为重心的情况. 每次只关心经过 ...