1.网络爬虫的架构 :
2.URL管理器的简单实现 :
(1)存放待爬取URL的 set 集合.
(2)存放未爬取URL的 set 集合.
(3)URL管理器应该具有的方法 : 添加新的URL, 判断添加的URL是否存在, 判断是否存在待爬取的URL, 获取待爬取的URL, 移动爬取完成的URL由未爬取 set 集合至 已爬取 set 集合.
3.网页下载器的三种实现 :
(1) 通过url简单实现.
#直接通过url获取要爬取的页面信息
response = urllib2.uelopen(url)
#获取爬取的返回状态码
statusCode = response.getCode()
#获取HTML内容
response.read()
(2) 对request数据的封装, 此时可以添加请求头, 设置代理, 和请求数据
import urllib2
#获取request
request = urllib2.Request("http://www.baidu.com")
#设置请求头
request.add_header("user-agent", 'Mozilla/5.0')
#获取响应信息
response = urllib2.urlopen(request)
#获取状态码
code = response.getcode()
#获取信息
info = response.read()
(3)添加一些特殊的处理 : eg, 添加cooker, HTTPCookieProcessor 用来处理cookie, ProxyHandler用来处理代理, HttpsHandler用来处理 Https的请求, HTTPRedirectHandler 用来处理跳转关系.
#获取cookie的容器
cookie = cookielib.CookieJar()
#获取cookie处理的模块
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookie))
#添加cookie处理模块
urllib2.install_opener(opener)
#访问url
response = urllib2.urlopen("http://www.baidu.com")
print response.getcode()
#打印cookie的内容
print cookie
print response.read()
3.网页解析器 :
(1)DOM树结构
(2)常用的解析方式 : 第一, 正则匹配, 会将下载的网页当做一个字符串, 进行模糊匹配; 第二, html.parser , Python自带的解析器 ; 第三. beautifulSoup 第三方解析插件, 很强大; 第四, Lxml 第三方解析. 其中后三种都是结构化的解析, 使用DOM树的模型.
4 BeautifulSoup4的使用 : 主要使用 bs4 进行网页的解析操作.
(1)find搜寻出的是符合条件的第一个元素.
(2)创建BeatuifulSoup4的对象 :
from bs4 import BeautifulSoup
soup = BeautifulSoup(
html_doc, #html 字符串
'html_parser', #html解析器
from_encoding='utf8' #编码格式
)
(3)进行节点搜索 : class属性在soup中使用class_表示html的 class属性, 因为class是Python的关键字. 下图中的re表示正则校验.
(4)访问节点信息 : 按照字典的形式访问节点中属性的信息.
(5)还可以使用soup对象进行属性过滤选择 : 使用soup.select
soup.select("p > #link1")
5. 对于Python的set集合 :
(1)set集合是不重复无序的, 无序指的是存放顺序和输出顺序不同.
(2)set.pop方法, 如果集合中方的是list和元祖时, 删除的是最左边的元素, 当存放的是字典和字符的集合的时候是随机删除的.
6.Python中的静态方法是写在class外面, 并且不添加self修饰的方法.
7.Python 中 'aaa{}'.format('bbb')会输出aaabbb
8. re.search(regex, str) 匹配字符串中是否包含正则表达式匹配的值.