网页抓取数据百度百科(网上一个教程写了一个简单的爬虫程序的程序)

优采云 发布时间: 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.处理一些特殊情况

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线