1、python urllib2爬虫下载网页的三种方法

#-*-coding:utf-8 -*-
import urllib2
import cookieliburl = "http://www.baidu.com"
print '第一种方法'
response1 = urllib2.urlopen(url)
print response1.getcode()
print len(response1.read())print "第二种方法"
request = urllib2.Request(url)
request.add_header("use-agent","Mozilla/5.0")
response2 = urllib2.urlopen(request)
print response2.getcode()
print len(response2.read())print "第三种方法"
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()

2、python pip安装beautifulsoup4命令

windows:进入Python安装目录Scripts文件夹
dir命令查看是否安装pip
输入:pip install beautifulsoup4

3、网页解析器 beautifulsoup语法基础

#根据HTML网页字符串创建BeautifulSoup对象
soup = BeautifulSoup(html_doc,                   #HTML文档字符串'html.parser',            #HTML解析器from_encoding='utf8'       #HTML文档的编码)#方法:find_all(name,attrs,string) 查找所有标签为a的节点
soup.find_all('a')
#查找所有标签为a,链接符合/view/123.htm形式的节点
soup.find_all('a',href='/view/123.htm')
#查找所有标签为div class为abc 文字为python的节点
soup.find_all('div',class_='abc',string='Python')#得到节点: <a href='1.html'>Python</a>
#获取查找到的节点的标签名称
node.name
#获取查找到的a节点的href属性
node['href']
#获取查找到的a节点的链接文字
node.get_text()

4、网页解析器 beautifulsoup语法练习

#-*- coding:utf-8 -*-
from bs4 import BeautifulSoup
import re
html_doc="""百度新闻页面源码,篇幅原因源码不写进来了"""soup = BeautifulSoup(html_doc, 'html.parser',from_encoding='utf-8')print '获取所有的链接'
links = soup.find_all('a')
for link in links:#print link.name,link['href'],link.get_text()print link.name, link.get('href'), link.get_text()print '获取http://news.baidu.com的链接'
link_node = soup.find('a',href='http://qijunjie.baijia.baidu.com/article/799732')
print link_node.name, link_node.get('href'), link_node.get_text()print '正则匹配'
link_node = soup.find('a',href=re.compile(r"qijunjie"))
print link_node.name, link_node.get('href'), link_node.get_text()print '获取a打开新页面的链接'
links= soup.find_all('a',target='_blank')
for link in links:print link.name, link.get_text()

5、网络爬虫示例

   5.1调度器  spider_main.py
#-*- coding:utf-8 -*-
from baike_spider import html_downloader,html_outputer,html_parser,url_managerclass SpiderMain(object):def __init__(self):self.urls = url_manager.UrlManage()self.downloader = html_downloader.HtmlDownloader()self.parser = html_parser.HtmlParser()self.outputer = html_outputer.HtmlOutputer()def craw(self,root_url):self.urls.add_new_url(root_url)count = 1while self.urls.has_new_url():try:new_url = self.urls.get_new_url()print 'craw %d : %s'%(count,new_url)html_cont = self.downloader.download(new_url)new_urls,new_data = self.parser.parse(new_url,html_cont)self.urls.add_new_urls(new_urls)self.outputer.collect_data(new_data)if count == 1000:breakcount = count + 1except:print 'craw failed'self.outputer.output_html()if __name__=="__main__":root_url = "http://baike.baidu.com/item/乌金木?sefr=cr"obj_spider = SpiderMain()obj_spider.craw(root_url)
   5.2 url管理器  url_manager.py
#-*- coding:utf-8 -*-
class UrlManage(object):def __init__(self):self.new_urls = set()self.old_urls = set()def add_new_url(self, url):if url is None:returnif url not in self.new_urls and url not in self.old_urls:self.new_urls.add(url)def has_new_url(self):return len(self.new_urls) != 0def get_new_url(self):new_url = self.new_urls.pop()self.old_urls.add(new_url)return new_urldef add_new_urls(self, urls):if urls is None or len(urls) == 0:returnfor url in urls:self.add_new_url(url)
   5.3 下载器  html_downloader.py
#-*- coding:utf-8 -*-
import urllib2class HtmlDownloader(object):def download(self, url):if url is None:return Noneresponse = urllib2.urlopen(url)if response.getcode() != 200:return Nonereturn response.read()
   5.4 解析器  html_parser.py
#-*- coding:utf-8 -*-
import re
import urlparsefrom bs4 import BeautifulSoupclass HtmlParser(object):def parse(self, page_url, html_cont):if page_url is None or html_cont is None:returnsoup = BeautifulSoup(html_cont,'html.parser',from_encoding='utf-8')new_urls = self._get_new_urls(page_url,soup)new_data = self._get_new_data(page_url,soup)return new_urls,new_datadef _get_new_urls(self, page_url, soup):new_urls = set()links = soup.find_all('a',href=re.compile(r"/view/\d+\.htm"))for link in links:new_url = link['href']new_full_url = urlparse.urljoin(page_url,new_url)new_urls.add(new_full_url)return new_urlsdef _get_new_data(self, page_url, soup):res_data = {}res_data['url'] = page_url#<dd class="lemmaWgt-lemmaTitle-title"><h1>乌金木</h1>title_node = soup.find('dd',class_="lemmaWgt-lemmaTitle-title").find("h1")res_data['title'] = title_node.get_text()#<div class="lemma-summary" label-module="lemmaSummary">summary_node = soup.find('div',class_="lemma-summary")res_data['summary'] = summary_node.get_text()return res_data
   5.5 输出器  html_outputer.py
#-*- coding:utf-8 -*-
class HtmlOutputer(object):def __init__(self):self.datas = []def collect_data(self, data):if data is None:returnself.datas.append(data)def output_html(self):fout = open('out.html','w')fout.write("<html>")fout.write("<head>")fout.write("<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />")fout.write("</head>")fout.write("<body>")fout.write("<table>")for data in self.datas:fout.write("<tr>")fout.write("<td>%s</td>" % data['url'])fout.write("<td>%s</td>" % data['title'].encode('utf-8'))fout.write("<td>%s</td>" % data['summary'].encode('utf-8'))fout.write("</tr>")fout.write("</table>")fout.write("</body>")fout.write("</html>")

python urllib2及beautifulsoup学习相关推荐

  1. Python运用urllib2和BeautifulSoup爬取网站ZOL桌面壁纸上的精美电脑壁纸

    Python运用urllib2和BeautifulSoup爬取网站ZOL桌面壁纸上的精美电脑壁纸 #!/usr/bin/env python # -*- coding: utf-8 -*- # @Ti ...

  2. Python爬虫包 BeautifulSoup 递归抓取实例详解

    Python爬虫包 BeautifulSoup 递归抓取实例详解 概要: 爬虫的主要目的就是为了沿着网络抓取需要的内容.它们的本质是一种递归的过程.它们首先需要获得网页的内容,然后分析页面内容并找到另 ...

  3. Python urllib2和urllib的使用

    Python urllib2和urllib的使用 在Python中有很多库可以用来模拟浏览器发送请求抓取网页,本文中介绍使用urllib2来实现获取网页数据. urllib2是在Python2标准库中 ...

  4. python网络爬虫--BeautifulSoup

    本随笔记录学习崔庆才老师编著的<Python3网络爬虫开发实战>以及<Beautiful Soup 4.4.0文档>. 安装BeautifulSoup4以及解析器 Instal ...

  5. 学者该如何快速入门Python?内附十年Python程序员详细学习攻略

    目前python是一门相对应比较火爆的编程语言,应用范围也非常的广泛,但目前竞争不大,工资也算乐观,未来发展也极好. 但是对python这个行业根本不了解的情况下,一味的买书看书.看视频,是很难达到预 ...

  6. python爬虫-使用BeautifulSoup爬取新浪新闻标题

    ** python爬虫-使用BeautifulSoup爬取新浪新闻标题 ** 最近在学习爬虫的技巧,首先学习的是较为简单的BeautifulSoup,应用于新浪新闻上. import requests ...

  7. Python爬虫:BeautifulSoup库

    Beautiful Soup的简介 Beautiful Soup是python的一个库,最主要的功能是从网页抓取数据.官方解释如下: 1.Beautiful Soup提供一些简单的.python式的函 ...

  8. python值得报班学习吗

    python值得报班学习吗?最近有很多想要学习Python的同学都会问到这个问题,Python在近几年的发展前景是非常不错的,想要学会Python编程语言,建议还是报班学习,来看看下面的详细介绍吧. ...

  9. 赠书 | 干货!用 Python 动手学强化学习

    01 了解强化学习 新闻报道中很少将强化学 习与机器学习.深度学习.人工智能这些关键词区分开来,所以我们要先介绍什么是强化学习,再讲解其基本机制. 强化学习与机器学习.人工智能这些关键词之间的关系: ...

最新文章

  1. 封装 vue 组件的过程记录
  2. linux 查看 文档 不显示注释 命令
  3. 远程办公要降薪?谷歌带头:最高下降 25%
  4. 空间地理加权回归stata_xy妙妙屋丨地理加权回归和空间自相关
  5. ExtJs入门 (02)-布局面板
  6. 【DP】【树状数组】免费馅饼(luogu 7302/金牌导航 数据结构优化DP-4)
  7. 【今日CV 视觉论文速览】Wed, 20 Feb 2019
  8. iOS 音乐播放器之锁屏效果+歌词解析
  9. 345取出值怎么算角度_资料分析怎么提分?这几个公式你必须会!
  10. u盘的大小在计算机无法显示,Win10电脑插入U盘后没有显示可用容量打不开无法读取如何解决...
  11. 有一种单身叫宁缺勿滥 -- 纪念百年神棍节
  12. marshmallow——自定义类型
  13. Ajax:拥抱JSON,让XML走开
  14. 鞍部在哪里_富春江,富春江在哪里_富春江在哪个省_属于哪个省_就去旅游网
  15. 游戏测评浅浅试—MMO手游太古神王2测评
  16. CODESYS 赛搏机器智能MIC7001总线控制器+松下A6BE总线驱动器
  17. std list/vector sort 自定义类的排序
  18. Java8 Lambda 表达式官方文档
  19. 如何将PDF转换成SWF
  20. 便携式CAN分析仪can总线的产品特性及选型分享

热门文章

  1. Divine Array 思维,模拟,结论
  2. canal应用四:canal-adapter的使用
  3. Redis5.0.8集群搭建与说明
  4. Java中synchronized和Lock的区别
  5. http工具类(支持https,连接池和失败重试)
  6. php获取ip几种方法区别,php获取客户端IP地址的几种方法
  7. 获取分辨率函数是什么_深度学习应用“Zero Shot”超分辨率重构图像
  8. 金蝶结账时显示系统错误h80004005_干货!超详细操作流程!金蝶、用友日常账务处理大全!...
  9. python123平台作业答案第十二周_【2018年 网鼎杯CTF 第二场】红日安全-网鼎杯WriteUp(24日 更新:web详解)...
  10. php中调行高代码_单元格行高怎么设置