爬虫基础

基本架构:调度器,url管理器,网页下载器,网页解析器

调度器:启动爬虫,关闭爬虫,监视爬虫的进度

 

url管理器:管理待爬取的URL和已爬取的URL

    需要支持:添加新URL到待爬取集合

         判断待添加URL是否已经被爬取

         获取待爬取URL,判断是否还有带爬取的URL

         被爬取之后将该URL从待爬取集合移动到已爬取集合

    实现方式:存储在内存中,使用set数据结构

         存储在关系数据库

         存储在缓存数据库中

网页下载器:对URL管理器中待爬取的URL指定的网页以html形式下载到本地,存储成字符串

      urllib2:Python官方基础模块

      下载网页方法:response=urllib2.urlopen(url),使用response.getcode()方法获取状态码,是200则表示下载成功;response.read()方法读取下载内容

             使用request类,将url,data,header传入request类,调用urllib2.urlopen(request)

import urllib2

request=urllib2.Request(url)
#向服务器提交数据
request.add_data('a','1')  
#将爬虫伪装成一个mozilla浏览器
request.add_header('User-Agent','Mozilla/5.0')  
response = urllib2.urlopen(request)

             

添加特殊情景处理器   

 

         

import urlib2,cookielib

#创建cookie容器
cj = cookielib.CookieJar()

#创建一个opener
opener = urlib2.build_opener(urllib2.HTTPCookieProcessor(cj))

#给urlib2安装opener
uelib2.install_opener(opener)

#使用带有cookie的urllib2访问网页
response = urlibopen("http://www.baidu.com/")

 

 

网页解析器:对于网页下载器所产生的字符串进行解析,解析出价值数据与新的URL,添加进URL管理器

      使用正则表达式:字符串的模糊匹配,其余三种为结构化解析

      html.parser

      BeautifulSoup

 创建beautifulsoup对象:

from bs4 import BeautifulSoup


#根据html网页字符串创建beautifulsoup对象
soup = beautiful(html_doc,            #html文档字符串
                 'html.parser'        #html解析器
                 from_encoding='utf8' #html文档编码
                 )                    

搜索结点:

#查找所有标签为a的结点
soup.find_all('a')

#查找所有标签为a,链接符合/view/123.htm形式的节点
soup.find_all('a',href='/view/123.htm')

#查找所有标签为a,链接符合/view/数字.htm形式的节点
soup.find_all('a',href=re.compile(r'/view/\d+\.htm'))


#查找所有标签为div,class为abc,文字为Python的节点
soup.find_all('div',class_='abc',string='Python')

 

访问节点信息:

#得到节点<a href='1.html'>Python</a>

#获取查找到的节点的标签名称
node.name

#获取查找到的a节点的href属性
node['href']


#获取查找到的a节点的链接文字
node。get_text()

 

      lxml

 

posted @ 2017-08-02 18:30  HHello_World  阅读(247)  评论(0编辑  收藏  举报