博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
爬虫基础
阅读量:5059 次
发布时间:2019-06-12

本文共 1766 字,大约阅读时间需要 5 分钟。

基本架构:调度器,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 urllib2request=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()#创建一个openeropener = urlib2.build_opener(urllib2.HTTPCookieProcessor(cj))#给urlib2安装openeruelib2.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')

 

访问节点信息:

#得到节点Python#获取查找到的节点的标签名称node.name#获取查找到的a节点的href属性node['href']#获取查找到的a节点的链接文字node。get_text()

 

      lxml

 

转载于:https://www.cnblogs.com/HJhj/p/7274137.html

你可能感兴趣的文章
【笔记】如何在for语句中迭代多个可迭代对象
查看>>
C++ Primer Plus 读书笔记(第10、11章)
查看>>
默认构造函数
查看>>
JAVA基础补漏--ArrayList
查看>>
6.游戏特别离不开脚本(3)-JS脚本操作java(直接解析JS公式,并非完整JS文件或者函数)...
查看>>
超文本标记语言(HTML)
查看>>
MFC的初始化过程和消息映射技术
查看>>
Windows中使用Mysql-Proxy实现Mysql读写分离
查看>>
编程之美 set 5 寻找数组中最大值和最小值
查看>>
[百度空间] [原] Empty base class optimization
查看>>
keycode对照表
查看>>
BZOJ3444: 最后的晚餐
查看>>
ConnectionPoolTimeoutException: Timeout waiting for connection
查看>>
HorizontalScrollView实现先左滑动后右滑动动画
查看>>
编译Android系统源码(高通平台)
查看>>
The packages can be overrided by Java Endorsed Standards
查看>>
彻底理解android中的内部存储与外部存储
查看>>
电子商务系统的设计与实现(六):账务系统服务化的好处和坏处
查看>>
URLconf+MTV:Django眼中的MVC(zz)
查看>>
单词数 hdu 2072
查看>>