博客
关于我
强烈建议你试试无所不能的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

你可能感兴趣的文章
git .gitignore 文件不起作用
查看>>
Alan Turing的纪录片观后感
查看>>
c#自定义控件中的事件处理
查看>>
App.config自定义节点读取
查看>>
unity3d根据手机串号和二维码做正版验证
查看>>
二十六、Android WebView缓存
查看>>
django Models 常用的字段和参数
查看>>
linux -- 嵌入式linux下wifi无线网卡驱动
查看>>
SVN使用教程总结
查看>>
SQL中varchar和nvarchar有什么区别?
查看>>
OpenCV矩阵运算总结
查看>>
Java Build Practice 4:Extend and Invoke Ant API
查看>>
[转] Transformer图解
查看>>
FreeBSD方式安装 MAC OSX
查看>>
Linux 根文件系统制作
查看>>
IOS--沙盒机制
查看>>
My.Ioc 的性能
查看>>
使用 JointCode.Shuttle 访问任意 AppDomain 的服务
查看>>
hdoj 1846 Brave Game(巴什博弈)
查看>>
Round #345 B. Beautiful Paintings(Div.2)
查看>>