python简单爬虫的实现

python强大之处在于各种功能完善的模块。合理的运用可以省略很多细节的纠缠,提高开发效率。

用python实现一个功能较为完整的爬虫,不过区区几十行代码,但想想如果用底层C实现该是何等的复杂,光一个网页数据的获得就需要字节用原始套接字构建数据包,然后解析数据包获得,关于网页数据的解析,更是得喝一壶。

下面具体分析分析用python如何构建一个爬虫。

0X01  简单的爬虫主要功能模块

URL管理器:管理待抓取URL集合和已抓取URL集合,防止重复抓取、防止循环抓取。主要需要实现:添加新URL到待爬取集合中、判断待添加URL是否在容器中、判断是否还有待爬取URL、获得爬取URL、将URL从带爬取移动到已爬取。URL实现方式可以采用内存set()集合、关系数据库、缓存数据库。一般小型爬虫数据保存内存中已经足够了。

网页下载器:通过URL获得HTML网页数据保存成文本文件或者内存字符串。在python中提供了urlllib2模块、requests模块来实现这个功能。具体的代码实现在下面做详细分析。

网页解析器:通过获取的HTML文档,从中获得新的URL以及关心的数据。如何从HTML文档中获得需要的信息呢?  可以分析信息的结构,然后通过python正则表达式模糊匹配获得,但这种方法再面对复杂的HTML时就有点力不从心。可以通过python自带的html.parser来解析,或者通过第三方模块Beautiful Soup、lxml等来结构化解析。什么是结构化解析?  就是把把网页结构当做一棵树形结构,官方叫DOM(Document Object Model)。

然后通过搜索节点的方式来获得关心的节点数据。

运行流程:调度程序询问URL是否有带爬取的URL,如果有就获得一个,然后送到下载器获得HTML内容,然后再将内容送到解析器进行解析,得到新的URL和关心的数据,然后把新增加的URL放入URL管理器。

0X02 urllib2模块的使用

urllib2的使用有很多种方法。

第一种:

直接通过urlopen的方式获得HTML。

url = "http://www.baidu.com"

print ‘The First method‘
response1 = urllib2.urlopen(url)
print response1.getcode()
print len(response1.read())

第二种:

这个方法是自己构建HTTP请求头,伪装成一个浏览器,可以绕过一些反爬机制,自己构造HTTP请求头更加灵活。

url = "http://www.baidu.com"

print ‘The Second method‘
request = urllib2.Request(url)
request.add_header("user-agent", "Mozilla/5.0")
response2 = urllib2.urlopen(request)
print response2.getcode()
print len(response2.read())

第三种:

增加cookie处理,可以获得需要登录的页面信息。

url = "http://www.baidu.com"

print ‘The Third method‘
cj = cookielib.CookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
urllib2.install_opener(opener)
response3 = urllib2.urlopen(url)
print response3.getcode()
print cj
print len(response3.read())

当然这几种方法的使用都需要导入urllib2,第三种还需要导入cookielib。

0X03 BeautifulSoup的实现

下面简单说说BeautifulSoup的用法。大致也就是三步走:创建BeautifulSoup对象,寻找节点,获得节点内容。

from bs4 import  BeautifulSoup
import re

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>
"""

soup = BeautifulSoup(html_doc, ‘html.parser‘, from_encoding=‘utf-8‘)

print ‘Get all links‘
links = soup.find_all(‘a‘)
for link in links:
    print link.name,link[‘href‘],link.get_text()

print ‘Get lacie link‘
link_node = soup.find(‘a‘,href=‘http://example.com/lacie‘)
print link_node.name,link_node[‘href‘],link_node.get_text()

print ‘match‘
link_node = soup.find(‘a‘, href=re.compile(r‘ill‘))
print link_node.name, link_node[‘href‘], link_node.get_text()

print ‘p‘
p_node = soup.find(‘p‘, class_="title")
print p_node.name, p_node.get_text()

0X04 爬虫的简单实现

在此不再累赘,具体代码已上传到github  :  github.com/zibility/spider

时间: 2024-08-29 15:18:38

python简单爬虫的实现的相关文章

Python 简单爬虫

? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 import os import time import webbrowser as web import random count = random.randint(20,40) j = 0 while j < count:     i = 0     while i <= 5:         web.open_new_tab('http://www.cnblogs.com/evilxr/p/37642

Python简单爬虫入门二

接着上一次爬虫我们继续研究BeautifulSoup Python简单爬虫入门一 上一次我们爬虫我们已经成功的爬下了网页的源代码,那么这一次我们将继续来写怎么抓去具体想要的元素 首先回顾以下我们BeautifulSoup的基本结构如下 #!/usr/bin/env python # -*-coding:utf-8 -*- from bs4 import BeautifulSoup import requests headers = { 'User-Agent':'Mozilla/5.0 (Win

Python简单爬虫第六蛋!(完结撒花)

第六讲: 今天我们来实战一个项目,我本人比较喜欢看小说,有一部小时叫<圣墟>不知道大家有没有听说过,个人觉得还是不错的,现在联网的时候,都可以随时随地用手机打开浏览器搜索查看,但是有时候也会遇到没有网络的情况,这个就很扎心了,有什么办法呢?所以这个项目基于这么一个现实背景来分析实现一下,把我们前几次讲到一些技术方法都运用一遍. (有人可能会说直接下载一个txt格式的小说文本文件不就好了,虽然是挺方便的,但是懒惰是不好的习惯,而且也没有运用到所学的知识,那么我们何必要学习呢?为什么要学,看完实例

Python 简单爬虫案例

Python 简单爬虫案例 import requests url = "https://www.sogou.com/web" # 封装参数 wd = input('enter a word') param = { 'query':wd } response = requests.get(url=url,params=param) page_text = response.content fileName = wd+'.html' with open(fileName,'wb') as

python简单爬虫

爬虫真是一件有意思的事儿啊,之前写过爬虫,用的是urllib2.BeautifulSoup实现简单爬虫,scrapy也有实现过.最近想更好的学习爬虫,那么就尽可能的做记录吧.这篇博客就我今天的一个学习过程写写吧. 一  正则表达式 正则表达式是一个很强大的工具了,众多的语法规则,我在爬虫中常用的有: . 匹配任意字符(换行符除外) * 匹配前一个字符0或无限次 ? 匹配前一个字符0或1次 .* 贪心算法 .*? 非贪心算法 (.*?) 将匹配到的括号中的结果输出 \d 匹配数字 re.S 使得.

python 简单爬虫(beatifulsoup)

---恢复内容开始--- python爬虫学习从0开始 第一次学习了python语法,迫不及待的来开始python的项目.首先接触了爬虫,是一个简单爬虫.个人感觉python非常简洁,相比起java或其他面向对象的编程语言,动态语言不需要声明函数或变量类型.python有20年的发展历史,以简洁高效闻名,python最初只是一个马戏团的名字,它的哲学是'用一种方法完成一件事情'.我第一次使用python时就被它的简洁高效迷住了,相比起c++和java,他简直太棒了.而且现阶段的大数据和人工智能领

python 简单爬虫diy

简单爬虫直接diy, 复杂的用scrapy import urllib2 import re from bs4 import BeautifulSoap req = urllib2.Request(url, headers={'User-Agent' : "Magic Browser"}) webpage= urllib2.urlopen(req) soap = BeautifulSoap(webpage.read()) ...

python简单爬虫定时推送同花顺直播及荐股至邮箱

1.初衷:实践 2.技术:python requests Template 3.思路:根据直播页面获取评价最高的前十博主,定时爬行最新的消息和实战股票 4.思路:python 编辑简单邮件html模板 5.难点:邮件html模板的设计,还需要邮箱支持 爬虫文件 '''-- #coding:utf-8import requestsfrom lxml import etreefrom sendmail import sendmailimport sys, timefrom string import

Python简单爬虫第一蛋!

Python爬虫简单教程 一.准备工作: ①python 3.x 的环境 ②Windows 10 操作系统 ③能连接上互联网 二.注意事项: ①仅供参考学习,如有转载请注明出处! ②获取的数据不能用于商业应用,仅供学习. ③注意动手实践. 第一讲:第一个模块(requests)的使用教程 首先,需要安装一下requests 模块,这个在系统命令行(cmd)中用 pip install requests 命令完成.(这是很基本的操作,直接跳过哈) 然后打开我们的IDE(这里我用的是Spyder,也