您的位置:首页 > 编程语言 > Python开发

python爬虫笔记-持续更新

2018-01-26 17:06 281 查看
爬虫主要分为两个部分,第一个是网页界面的获取,第二个是网页界面的解析;爬虫的原理是利用代码模拟浏览器访问网站,与浏览器不同的是,爬虫获取到的是网页的源代码,没有了浏览器的翻译效果。

这里我们使用urllib2进行网站页面的获取;首先导入urllib2模块包

import urllib2 

调用urllib2中的urlopen方法链接网站,代码如下repr=urllib2.urlopen("XXXXXX"),XXXXXX代表的是网站名称。 

repr = urllib2.urlopen("http://www.baidu.com")

得到网站的响应之后,然后就是将页面的源代码读取出来,调用read方法

html=repr.read()

将自己想要的数据从html界面源代码中解析出来,解析界面的模块包有很多,原始的re

import re

进行利用re进行搜索,这里我有使用正则表达式

url = re.search(r'<img hidefocus="true" src="(.*?)".*?',html).group(1)

打印除url

print url

url管理器:用来管理将要抓取的url和已经抓取过的

-防止重复抓取,防止循环抓取

-添加新的url到待爬取集合中,判断待添加url是否在容器中

-判断是否有待爬取url,获取待爬取url,将url从待爬取移动到已爬取

--存储1-内存中包含待爬取url集合set()和已爬取url集合set(),可自动去重

--存储2-关系型数据库中mysql中包含表urls(url,is_crawled)

--存储3-缓存数据库中redis包含待爬取url集合set和已爬取的url集合set

网页下载器:urllib2

--核心组件,将互联网上url对应的网页下载到本地的工具

--urllib2 为python官方基础模块

--requests 为第三方包更强大

实例1:import urllib2  --导入包

response = urllib2.urlopen("www.baidu.com")  --请求

print response.getcode() --获取状态码,如果是200代表成功

response.read()

实例2:import urllib2  --导入包

request = urllib2.Request(url)  --创建request对象

request.add_data('a',1)  --添加数据

request.add_header('User-Agent','Mozilla/5.0')--添加header,伪装成mozilla浏览器

response = urllib2.urlopen(request)发送请求获取结果

特殊情景

1-需要登陆的网站则用 HTTPCookieProcessor

2-需要代理的网站则用 ProxyHandler 

3-需要https协议登陆网站则用HTTPSHandler

4-需要自动跳转网站则用HTTPRedirectHandler

先调用opener = urllib2.build_opener(1/2/3/4)

urllib2.install_opener(opener)

import urllib2, cookielib

cj = cookielib.CookieJar() --创建cookie容器

opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))--创建opener

urllib2.install_opener(opener) --安装opener

response = urllib2.urlopen("http://www.baidu.com/")发送请求获取结果

网页解析器:beautifulsoup

--从网页中提取有价值数据的工具,包括数据和新的url

1-正则表达式  模糊匹配

2-官方 html.parser 结构化解析

3-第三方 BeautifulSoup  强大结构化解析,包括2/3/4 功能

4-第三方 lxml 结构化解析

beautifulsoup语法

创建beautifulsoup对象--》搜索节点find_all,find--》访问节点名称,属性,文字

爬虫:一段自动抓取互联网信息的程序

从一个url出发,自动提取关联url的程序

价值:互联网数据,为我所用,分析爬取的数据

做成爆笑故事的app,对比图书价格,新闻聚合阅读器

爬虫调度端--》url管理器--》网页下载器--》网页解析器--》价值数据

抓取百度百科  

目标地址  http://baike.baidu.com/item/Python

links = soup.find_all('a', href=re.compile(r"/item/(.*)"))

使用的python3.5,在window下,我在调试的时候遇到里编码出错的问题,找了很久,终于解决里。这此分享出来,给可能遇到同样问题的同学。 当把抓取出来的内容显示在网页上时,这个地方是出错的关键点。在windows下面,新文件的默认编码是gbk,这样的话,python解释器会用gbk编码去解析我们的网络数据流txt,然而txt此时已经是decode过的unicode编码,这样的话就会导致解析不了,出现问题。应写为: fout = open('output.html','w',encoding='utf-8')
同时在html中声明<meta charset='utf-8'>

    
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: