爬虫基本知识及简单生成爬虫

(1)爬虫是什么:一段自动抓取互联网信息的程序,互联网是URL的互相连接,爬虫就是从一个URL出发然后走到与它相关的所有URL并且提取需要的数据;价值:获得更多互联网数据,得到自己想用的数据;

(2)简单爬虫构架:爬虫调度端:URL管理器,包括已经爬取的URL和未访问的URL,把待爬取的URL传递给网页下载器,下载器下载下来存储成为字符串,然后把字符串传递给网页解析器,网页解析器一方面获取有价值的数据,另一方面把解析的URL补充进URL管理器。

①URL管理器:含带抓取的URL和已经抓取过得URL,防止重复抓取和循环抓取。三种实现方式:待爬取和已经爬取的保存在内存中,python中就是:.set()可以去重;保存在关系库当中MySQL urls(url,is_crawled),用表保存;缓存数据库,redis:都在set中。大型的都在缓存数据库当中,我们一般就保存在内存中,如果内存不够,或者永久保存就保存在关系库当中。

②网页下载器(urllib):互联网上的URL对应的网页下载到本地的工具。python有哪些实现模块:urllib官方的基础模块,直接的URL下载或者向网页提交需要用户提供输入的数据甚至支持需要用户登录的处理和需要代理访问的代理处理;requests是第三方查件,有更强大的功能,本次选择urllib2介绍,有三种下载方法:如下《第二种:header 向服务器提交头信息  data 向用户提交需要用户输入的数据#将url,header,data传送给urllib2.Request对象,然后urllib2.urlopen(request)》《第三种:特殊情景的处理器,比如有些网站需要登录需要cookie的处理,HTTPCookieProcessor 代理才能访问使用#ProxyHandler ,需要加密访问的使用HTTPSHandler,有些网页url相互自动跳转的方式使用#HTTPRedirectHandler,然后传递给#opener=urllib.build_opener(handler),url=urllib.install_opener(opener),urllib.urlopen(url)#cookie的处理#创建一个cookie的容器#生成一个参数#创建一个opener#给urllib2安装opener#实现网站的下载》
 

from urllib.request import urlopen

#直接请求
response=urlopen("http://www.baidu.com")

#获取状态码,判断是否成功如果是200表示获取成功
print(response.getcode())

#读取下载好的内容
print(response.read())

③网页解析器:正则表达式,模糊匹配的方式,非常麻烦;自带的html.parser;第三方插件BeautifulSoup(比较强大);第三方插件lxml是解析xml网页。后面三种都是结构化解析—下载成DOM树,以树的方式,以实现对上下级的遍历,它把网页文档当成Document的对象,下面就是<html>根节点,再下面是<body>元素和<head>元素,<head>元素下面就是<title>元素等子元素,如果再没有子元素就是“我的标题”文本,<body>元素会有很多子元素<a>→“链接文本”;元素<div>→有很多子元素或者直接包含“段落文字”

BeatuifulSoup的语法:1,创建BeautifulSoup,就是把文档字符串换成一个DOM树;2,搜索节点,find_all可以搜索出所有节点,find方法只能搜索出第一个满足要求的节点,这两个参数是一模一样的;3,访问节点:名称,属性,文字。<a(名称) href='123.html' (属性)class='artcle_link(属性)> Python (文字)</a>

from bs4 import BeautfulSoup
#创建对象
soup=BeautifulSoup(html_doc,#文档字符串
                  'html.parser',#解析器
                   from_encoding='utf8'#文档的编码
                   )
#搜索对象,标签为a,链接符合/view/123.htm形式的节点
soup.find_all('a',href='/view/123.htm')
#可以传入正则表达式,模糊匹配
soup.find_all('a',href=re.compile(r'/view/\d+\.htm'))

#class下划线避免冲突
soup.find_all('div',class_='abc',string='Python')

#访问节点的信息
node.name #获取找到节点的标签名称
nade[‘href’] #查找到节点的herf的属性
nade.get_text() #查找节点的链接文字

(5)完整实例下一个哦直通车:

猜你喜欢

转载自blog.csdn.net/weixin_43552006/article/details/83582470