python爬虫笔记-持续更新

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/weixin_38500014/article/details/79174639
爬虫主要分为两个部分,第一个是网页界面的获取,第二个是网页界面的解析;爬虫的原理是利用代码模拟浏览器访问网站,与浏览器不同的是,爬虫获取到的是网页的源代码,没有了浏览器的翻译效果。


这里我们使用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'>
    

猜你喜欢

转载自blog.csdn.net/weixin_38500014/article/details/79174639
今日推荐