Python开发简单爬虫(一)

一 、简单爬虫架构:

爬虫调度端:启动爬虫,停止爬虫,监视爬虫运行情况
URL管理器:对将要爬取的和已经爬取过的URL进行管理;可取出带爬取的URL,将其传送给“网页下载器”
网页下载器:将URL指定的网页下载,存储成一个字符串,在传送给“网页解析器”
网页解析器:解析网页可解析出 ①有价值的数据 ②另一方面,每个网页都包含有指向其他网页的URL,解析出来后可补充进“URL管理器”,不断循环。

二、简单爬虫架构的动态运行流程

三、爬虫URL管理

URL管理器:管理待抓取URL集合和已抓取URL集合 防止重复抓取。

url: 添加新url到爬取集合中, 判断待添加url是否在容器中, 判断是否还有待爬取的url, 获取待爬取url, 将url从待爬移动到已爬

四、爬虫URL管理器的实现方式

URL管理器的三种实现方式:内存、关系数据库、缓存数据库

存放在内存中是利用set()集合,可以去除重复元素,利用MySQL里的is_crawled参数是用来标记已爬取还是未爬取,redis数据库同样利用set集合。

五、爬虫网页下载器

Python网页下载器有:
1)urllib2 (Python官方基础模块)python 3.x中urllib库和urilib2库合并为urllib库。

2)requests (第三方包,更强大)

爬虫urlib2下载器网页的三种方法:

方法一:直接将url传送给urllib2模块的urlopen()方法

方法二:共享处理,添加data、http header

可以将url,data,header三个参数传送给urllib2的Request类,生成Resquest对象,再将Resquest对象作为参数传递给urlopen()方法来发送网页请求

方法三:添加特殊情景的处理器

有些网页需要用户登录才能访问,此时需要添加cookie的处理,则使用HTTPCookieProcessor进行处理

有些网页需要代理才能访问,则使用ProxyHandler进行处理

有些网页使用的是HTTPS协议加密访问的,则使用HTTPSHandler进行处理

还有些网页中的url存在相互的自动的跳转关系,则使用HTTPRedirectHandler进行处理

可将这些handler传送给build_opener()方法生成一个opener对象,然后给urlib2安装该opener,再利用urlopen()方法发送网页请求,实现网页的下载

例:增强cookie的处理

 六、网页下载器urllib2三种方法实例代码

方法一:

import urllib2
# -*- coding: utf-8 -*-
#第一种方法
url = ‘http://www.baidu.com‘
response1 = urllib2.urlopen(url)
print response1.getcode()       #打印一下状态码,确定请求是否成功
print len(response1.read())     #打印返回的网页内容的长度

方法二:

# -*- coding: utf-8 -*-
import urllib2

url = ‘http://www.baidu.com‘
request = urllib2.Request(url)
request.add_header("user-agent","Mozilla/5.0") #为request对象添加了http头信息,并将爬虫伪装成了Mozilla浏览器
response2 = urllib2.urlopen(request)
print response2.getcode()
print len(response2.read())

 方法三:

先创建一个cookie容器为cj,

然后创建一个opener,是以容器作为参数通过urllib2.HTTPCookieProcessor()方法创建一个handler,再传给build_opener()方法实现,

为urllib2安装opener,此时urllib2就具有了cookie处理的增强能力,

最后然后就使用urlopen()方法访问正常的url

最后即可打印出cookie的内容和网页的内容

import urllib2
import cookielib

url = ‘http://www.baidu.com‘
cj = cookielib.CookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
urllib2.install_opener(opener)
response3 = urllib2.urlopen(url)
print response3.getcode()
print cj
print response3.read()

七、爬虫网页解析器

网页解析器:从网页中提取有价值数据的工具

python四种网页解析方式:
模糊匹配:
1.正则表达式(最直观的一种方式,将网页或文档看成是一个字符串,以模糊匹配的方式提取出有价值的数据,但如果文档比较复杂时此方式非常麻烦)
结构化解析:(即将整个网页加载成一个DOM树,以树的形式来进行上下级的遍历和访问)
2.html.parser;(Python的模块)
3.BeautifulSoup,(第三方插件,同时可以使用html.parser和lxml作为解析器)

4.lxml;(第三方插件,可解析html网页或xml网页)

八、使用BeautifulSoup4

BeautifulSoup是Python的第三方库,用于从HTML或XML中提取数据

安装BeautifulSoup4:

1)打开cmd命令窗口

2)进入Python的安装目录下的Scripts

cd C:\Python27\Scripts

3) 输入dir,显示pip.exe已安装

4)输入pip install beautifulsoup4,即可安装beautifulsoup4

 BeautifulSoup的语法:

1)根据已下载好的html网页创建一个beautifulsoup对象,创建该对象的同时就已将整个文档加载成一个DOM树,

2)然后根据此DOM就可对节点进行搜索,搜索节点有两个方法:

find_all方法和find方法,两个方法的参数相同,find_all方法会搜索出所有满足要求的节点,find方法只会搜索出第一个满足要求的节点,

在搜索节点时,可按照节点的名称,属性或文字进行搜索。

3)得到了节点之后,就可以访问节点的名称、属性和内容文字。

例:可使用三种方式对下面a链接进行搜索和访问

代码如下:

1.创建BeautifulSoup对象并同时加载好了DOM树

# -*- coding: utf-8 -*-
from bs4 import BeautifulSoup
#根据HTML网页字符串创建BeautifulSoup对象
soup = BeautifulSoup(
                    html_doc,              #HTML文档字符串,指利用网页下载器下载好的html文件或者是存在本地的html文件,是要提前赋值的
                    ‘html.parser‘,          #HTML解析器
                    from_encoding = ‘utf-8‘ #HTML文档的编码
                    )

2.搜索节点(find_all,find)

#方法:find_all(name,attrs,string)

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

#查找所有标签为a,链接符合/view/123.htm形式的节点
soup.find_all(‘a‘,href=‘/view/123.htm‘)
soup.find_all(‘a‘,href=re.compile(r‘/view/\d+\.htm‘)) #可以使用正则表达式进行匹配

#查找所有标签为div,class为abc,文字为Python的节点
soup.find_all(‘div‘,class_=‘abc‘,string=‘Python‘)  #因为class是Python的关键字,为了避免冲突使用class_

3.访问节点的信息

#例:得到节点<a href=‘1.html‘>Python</a>

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

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

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

 BeautifulSoup实例演示:

# -*- coding: utf-8 -*-
import os
import re
from bs4 import BeautifulSoup

html_doc = """
<html><head><title>The Dormouse‘s story</title></head>
<body>
<p class="title"><b>The Dormouse‘s story</b></p>
<p class="story">Once upon a time there were three little sisters; and their names were
<a href="http://example.com/elsie" class="sister" id="link1">Elsie</a>,
<a href="http://example.com/lacie" class="sister" id="link2">Lacie</a> and
<a href="http://example.com/tillie" class="sister" id="link3">Tillie</a>;
and they lived at the bottom of a well.</p>
<p class="story">...</p>
"""
print ‘获取所有的a链接:‘
soup = BeautifulSoup(html_doc,‘html.parser‘,from_encoding=‘utf-8‘)
links = soup.find_all(‘a‘)
for link in links:
    print link.name,link[‘href‘],link.get_text()

print ‘获取lacie的链接:‘
link_node1 = soup.find(‘a‘,href=‘http://example.com/lacie‘)
print link_node1.name,link_node1[‘href‘],link_node1.get_text()

print ‘使用正则表达式匹配:‘
link_node2 = soup.find(‘a‘,href=re.compile(r"ill"))
print link_node2.name,link_node2[‘href‘],link_node2.get_text()

print ‘获取指定p段落的文字:‘
p_node = soup.find(‘p‘,class_=‘title‘)
print p_node.name,p_node.get_text()

输出结果:

时间: 2024-10-10 14:51:05

Python开发简单爬虫(一)的相关文章

Python开发简单爬虫

可关注我的个人微信公众号:卟野iiiiiiiya Python开发简单爬虫: https://mp.weixin.qq.com/s?__biz=MzI0MDY0NzI3Mw==&tempkey=OTMwX3pMejY4VFdoVlQ1cWpyNXNYdFhqcWViaHY1bFlQUTdmU1RrUnpkc1IzQmNfWENHVXFZb2ZLajhURlFyZmZaa3JVOHRkYkJaZVF1ZXVmdk5nUHFFNU0xeVAyQm1rMnlLbVJGa3h4eTBpMjNVdnc3b

Python 开发简单爬虫 - 基础框架

1. 目标:开发轻量级爬虫(不包括需登陆的 和 Javascript异步加载的) 不需要登陆的静态网页抓取 2. 内容: 2.1 爬虫简介 2.2 简单爬虫架构 2.3 URL管理器 2.4 网页下载器(urllib2) 2.5 网页解析器(BeautifulSoup) 2.6 完整实例:爬取百度百科Python词条相关的1000个页面数据 3. 爬虫简介:一段自动抓取互联网信息的程序 爬虫价值:互联网数据,为我所用. 4. 简单爬虫架构: 运行流程: 5. URL管理器:管理待抓取URL集合

Python开发简单爬虫(二)---爬取百度百科页面数据

一.开发爬虫的步骤 1.确定目标抓取策略: 打开目标页面,通过右键审查元素确定网页的url格式.数据格式.和网页编码形式. ①先看url的格式, F12观察一下链接的形式;② 再看目标文本信息的标签格式, 比如文本数据为div class="xxx", ③ 容易看到编码为utf-8 2.分析目标 目标: 百度百科python词条 入口页: http://baike.baidu.com/item/Python词条页面url格式:/item/**** 数据格式: 标题: <dd cl

Python 开发简单爬虫 - 实战演练

爬取百度百科1000个页面的数据 1. 准备工作: 确定目标  =>  分析目标(URL格式, 数据格式, 网页编码) =>  编写代码  =>  执行爬虫 1.1 链接分析: 进入百度百科"Python"词条页面:http://baike.baidu.com/view/21087.htm => 在链接位置右键后,点击审查元素, href="/view/2561555.htm" 是一个不完整的url, 在代码中需要拼接成完整的 baike.b

Python开发简单爬虫之静态网页抓取篇:爬取“豆瓣电影 Top 250”电影数据

目标:爬取豆瓣电影TOP250的所有电影名称,网址为:https://movie.douban.com/top250 1)确定目标网站的请求头: 打开目标网站,在网页空白处点击鼠标右键,选择"检查".(小编使用的是谷歌浏览器). 点击"network",在弹出页面若长时间没有数据显示,则试一下F5刷新. 可以得到目标网页中Host和User-Agent两项. 2)找到爬取目标数据(即电影名称)在页面中的位置 右键"检查",选择"Elem

Python 开发轻量级爬虫03

Python 开发轻量级爬虫 (imooc总结03--简单的爬虫架构) 现在来看一下一个简单的爬虫架构. 要实现一个简单的爬虫,有哪些方面需要考虑呢? 首先需要一个爬虫调度端,来启动爬虫.停止爬虫.监视爬虫的运行情况. 在爬虫程序中有三个模块.首先url管理器来对将要爬取的url和已经爬取过的url这两个数据的进行管理. 从url管理器中取出一个待爬取的url将其传送给网页下载器,下载器将指定的网页下载下来存储成一个字符串,这个字符串会传送给网页解析器进行解析, 一方面会解析出有价值的数据,另一

Python 开发轻量级爬虫01

Python 开发轻量级爬虫 (imooc总结01--课程目标) 课程目标:掌握开发轻量级爬虫 为什么说是轻量级的呢?因为一个复杂的爬虫需要考虑的问题场景非常多,比如有些网页需要用户登录了以后才能够访问,有些网页是 使用了Ajax异步加载的内容,这些网页的抓取就会比较复杂. 这里只会考虑不需要登录的静态加载网页的抓取. 课程包含以下内容: 1.爬虫简介 介绍爬虫是什么?它实现了什么功能? 2.简单爬虫架构 介绍简单的爬虫架构,架构中包含了哪些模块,这些模块怎么组装在一起完成整个爬取任务的.但该架

Python 开发轻量级爬虫05

Python 开发轻量级爬虫 (imooc总结05--网页下载器) 介绍网页下载器 网页下载器是将互联网上url对应的网页下载到本地的工具.因为将网页下载到本地才能进行后续的分析处理,可以说网页下载器是爬虫的核心组件. 网页下载器类似于网页浏览器,会将url对应的互联网网页,以HTML的形式下载到本地存储一个本地文件或者本地字符串,然后才能进行后续的分析和处理. Python有哪几种网页下载器呢? Urllib2 – python官方的基础模块,它支持直接的url下载, 或者说向网页提交一些需要

Python 开发轻量级爬虫02

Python 开发轻量级爬虫 (imooc总结02--爬虫简介) 爬虫简介 首先爬虫是什么?它是一段自动抓取互联网信息的程序. 什么意思呢? 互联网由各种各样的的网页组成,每一个网页都有对应的url,而url页面上又有很多指向其它页面的url,这些url之间相互指向的关系, 就形成了一个网状,这就是互联网. 正常情况下,我们使用人工的方式,从互联网上获取我们需要的感兴趣的信息.那有没有一种方法,我们设定了一个主题,设定一个感兴趣的目标, 可以自动从互联网上获取我们所需要的数据呢?这就是爬虫. 爬