快速实现一个python网络爬虫的最小单元

主要内容

1.爬虫简介

一、初步理解:
1.1 简介:自动访问互联网并自动提取数据的程序
爬虫结构简介
1.2、价值:互联网数据为我所用
爬虫的价值所在

2.简单爬虫架构

2.1、框架:核心功能由URL管理器、网页下载端、网页解析器,三大模块的循环工作来完成
爬虫框架

2.2、运行流程:时序图分析如下:
爬虫工作时序图

3.URL管理器

3.1、URL管理器
3.1.1 简介:
设计管理器的目的是为了防止重复抓取和循环抓取,必须包含以下五大基本功能:
url管理器结构
3.1.2、URL管理器的实现
python中set()数据结构特点,会自动过滤掉重复的元素,用于存储url比较合适;
数据量大并计划永久保存url数据,可选用关系型数据库;而一般大型企业选用高性能的缓存数据库进行url的管理
url实现

4.网页下载器

4.1 简介:
爬虫的核心模块
网页下载器
4.2常见的下载器
方法一:urllib2 简洁方式,功能单一
urllib2 demo
方法二:可以添加数据项和数据头部信息
添加data、head
代码实现:
add_data方法传入的两个参数,可以理解为用户的数据,a这个数据项,其值 为1
urllib2-data代码实现
方法三:添加特殊情景的处理器
以下的处理器,HTTPCookieProcessor用于处理需要登录的网页下载;ProxyHandler处理需要代理功能的网页下载;HTTPSHandler处理加密访问的网页下载;HTTPRedictHander处理可以相互调用访问的网页的下载
在这里插入图片描述
代码实现:以第一个可以处理cookie的处理器为例
cookie代码实现

5.网页解析器

5.1 网页解析器
5.1.1 功能简介:
网页解析器结构
5.2 分类
BeautifulSoup是第三方库,可以使用python的网页解析模块html.parser,也可使用lxml第三方库,功能最为强大,第一种为字符串的模糊匹配,适用于简单的解析,后三种为结构化解析,适用于复杂网页解析。
网页解析器分类

5.3 结构化解析原理
即把网页文档当做一个DOC对象,使用DOC对象中的一些方法进行解析。

结构化解析
5.4 BeautifulSoup4
bs4语法
bs4语法
bs4使用示例:

2.3.5 BeautifulSoup4使用示例
from bs4 import BeautifulSoup
import re

html = """
<html><head><title>The Dormouse's story</title></head>
<body>
<p class="title" name="dromouse"><b>The Dormouse's story</b></p>
<p class="story">Once upon a time there were three little sisters; and their names were
<a href="http://example.com/elsie" class="sister" id="link1"><!-- Elsie --></a>,
<a href="http://example.com/lacie" class="sister" id="link2">Lacie</a> and
<a href="http://example.com/tillie" class="sister" id="link3">Tillie</a>;
and they lived at the bottom of a well.</p>
<p class="story">...</p>
"""

print "--find all links--"  #获取所有链接
soup = BeautifulSoup(html,'html.parser',from_encoding='utf-8')
links = soup.find_all('a')
for link in links:
	print link.name,link['href'],link.get_text()

print '--find fixed link--' #获取指定链接
link_node = soup.find('a',href = 'http://example.com/lacie')
print link_node.name,link_node['href'],link_node.get_text()

print '--zhengzepipei--' #正则匹配
link_node = soup.find('a',href=re.compile(r"ill"))
print link_node.name,link_node['href'],link_node.get_text()

print '--get p text--'   #获取P字段内容
p_node = soup.find('p',class_='title')
print p_node.name,p_node.get_text()

#通过标签内容获取节点
print '--get node from string'
s_nodes = soup.find_all('a',class_ = 'sister',string = 'Lacie')
for s_node in s_nodes:
   print s_node.name,s_node.get_text()
   

完整实例

爬虫实例结构图

源码:
https://download.csdn.net/my

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值