网页抓取数据百度百科(网上一个教程写了一个简单的爬虫程序的程序)
优采云 发布时间: 2022-02-27 16:01网页抓取数据百度百科(网上一个教程写了一个简单的爬虫程序的程序)
最近学了一些python基础,为了练手,跟着网上的教程写了一个简单的爬虫程序。python上手还是很容易的,整个过程很顺利,几乎成功了。
1.爬虫架构和工作流程
一个爬虫程序可以分为四个基本模块,通用调度器、URL管理器、网页下载器和网页解析器。
整体调度部分负责启动、停止和监控程序的运行进度。
URL管理器负责管理已爬取的URL和未爬取的URL,它将未爬取的网页URL发送给网页下载器,并从未爬取的URL列表中删除这些URL。
网页下载器负责下载网页内容,将其转换成字符串形式(在本程序中)并发送给网页解析器。
网页解析器负责从抓取的网页内容中提取有价值的数据。该程序中有价值的数据是网页中的URL以及条目名称和条目介绍。
2.各个模块的实现
2.1 URL管理器的实现
网页 URL 可以存储在内存中(以 set() 的形式)、MySQL 数据库和 redis 缓存数据库(对于大型项目)。本项目的 URL 以 set() 的形式存储在内存中。
代码:
class UrlManager(object):
def __init__(self):
#初始化两个url集合
self.new_urls=set()#存放未爬取过的url
self.old_urls=set()#存放已爬取过的url
def add_new_url(self,url):#单个添加
if url is None:
return #如果是空的则不进行操作
if url not in self.new_urls and url not in self.old_urls:#全新的url
self.new_urls.add(url)
def has_new_url(self):#判断是否有未爬取的url
return len(self.new_urls)!=0
def get_new_url(self):
new_url = self.new_urls.pop()#从未怕去的url列表获取一个并移除
self.old_urls.add(new_url)
return new_url
def add_new_urls(self,urls):#批量添加
if urls is None or len(urls)==0:
return
for url in urls:
self.add_new_url(url)
2.2 网页下载器的实现
下载网页的三种方式
1.下载最简单的网页(无需登录验证,无需加密...)
response = urllib.request.urlopen(url, data=None, timeout)
Referer:可以用来防止盗链。如果REFER信息来自其他网站,则禁止访问所需资源
Connection:表示连接状态,记录Session的状态。
request.add_header('user_agent', 'Mozilla/5.0') 将程序伪装成 Firefox
3.处理一些特殊情况