网络爬虫:各种模板
来源:互联网 发布:mysql触发器实例 编辑:程序博客网 时间:2024/05/13 06:28
运行BeautifulSoup
import urllib.requestimport urllib.errorfrom bs4 import BeautifulSoupdef get_title(url): try: req=urllib.request.Request(url) response=urllib.request.urlopen(req) except (urllib.error.HTTPError,urllib.error.URLError) as e: #网页在服务器不存在,或者服务器不存在 print(e) return None try: html = response.read().decode("utf-8") soup = BeautifulSoup(html, "html.parser") title=soup.body.h1 except AttributeError as e: #标签不存在 return None return titleif __name__=="__main__": url="http://www.pythonscraping.com/exercises/exercise1.html" title=get_title(url) if title == None: print("Title could not be found") else: print(title)
我们创建了一个getTitle函数,可以返回网页的标题,如果获取网页的时候遇到问题就返回一个None对象。在getTitle函数里,检查了HTTPError,还检查了由于URL输入错误引起的URLError,然后把BeautifulSoup代码封装在一个try语句里面。这两行中的任何一行有问题,AttributeError 都可能被抛出(如果服务器不存在,html就是一个None对象,html.read()就会抛出AttributeError )。其实,我们可以在try语句里面放任意多行代码,或者放一个在任何位置都可以抛出AttributeError 的函数。
运行BeautifulSoup的find()和findAll()
# nameList = bsObj.findAll("span", {"class":"green"})nameList = bsObj.findAll("span", class_="green")for name in nameList: print(name.get_text())
更详细见:http://blog.csdn.net/chaowanghn/article/details/54646683
处理子标签、兄弟标签和父标签
from urllib.request import urlopenfrom bs4 import BeautifulSouphtml = urlopen("http://www.pythonscraping.com/pages/page3.html")bsObj = BeautifulSoup(html, "html.parser")for child in bsObj.find("table",{"id":"giftList"}).children: print(child)
from urllib.request import urlopenfrom bs4 import BeautifulSouphtml = urlopen("http://www.pythonscraping.com/pages/page3.html")bsObj = BeautifulSoup(html, "html.parser")for sibling in bsObj.find("table",{"id":"giftList"}).tr.next_siblings: print(sibling)
from urllib.request import urlopenfrom bs4 import BeautifulSouphtml = urlopen("http://www.pythonscraping.com/pages/page3.html")bsObj = BeautifulSoup(html, "html.parser")print(bsObj.find("img",{"src":"../img/gifts/img1.jpg"}).parent.previous_sibling.get_text())
查找图片
from urllib.request import urlopenfrom bs4 import BeautifulSoupimport rehtml = urlopen("http://www.pythonscraping.com/pages/page3.html")bsObj = BeautifulSoup(html, "html.parser")images = bsObj.findAll("img", {"src":re.compile("\.\.\/img\/gifts/img.*\.jpg")})for image in images: print(image["src"]) #print(image.attrs["src"])
查找网址链接
from urllib.request import urlopenfrom bs4 import BeautifulSoupimport redef getLinks(articleUrl): html = urlopen("http://en.wikipedia.org/wiki/Kevin_Bacon") bsObj = BeautifulSoup(html, "html.parser") links=bsObj.find("a") # links=bsObj.find("div", {"id":"bodyContent"}).findAll("a", href=re.compile("^(/wiki/)((?!:).)*$")) for link in links: if "href" in link.attrs: print (link.attrs["href"])
更换请求头
# 增加headers,模拟登陆,而不是对服务器识别为机器登陆。使用移动设备浏览网站时,通常会看到一个没有广告的、Flash以及其他干扰的简化的网站版本。url="http://baidu.com"headers={}headers["User-Agent"]="Mozilla/5.0 (iPhone; CPU iPhone OS 7_1_2 like Mac OS X) AppleWebKit/537.51.2 (KHTML, like Gecko) Version/7.0 Mobile/11D257 Safari/9537.53"req=urllib.request.Request(url,headers=headers)# req=urllib.request.Request(url,data,headers)#或者使用Request.add_header(key,value)# req=urllib.request.Request(url,data)# req.add_header("User-Agent","Mozilla/5.0 (iPhone; CPU iPhone OS 7_1_2 like Mac OS X) AppleWebKit/537.51.2 (KHTML, like Gecko) Version/7.0 Mobile/11D257 Safari/9537.53")response=urllib.request.urlopen(req)html=response.read().decode("utf-8")print (html)
URL管理器— urllib.request下载网页:添加特殊情景的处理器
urllib.request.HTTPCookieProcessor添加cookie登录
urllib.request.ProxyHandler添加代理
urllib.request.HTTPSHandler处理https加密访问的网页
urllib.request.HTTPRedirectHandler处理URL相互自动的跳转关系
#比如使用cookie访问网页import urllib.request, http.cookiejarfrom bs4 import BeautifulSoup#创建cookie容器cj=http.cookiejar.CookieJar()#创建1个openeropener=urllib.request.build_opener(urllib.request.HTTPCookieProcessor(cj))#给urllib安装openerurllib.request.install_opener(opener)#使用带有cookie的urllib访问网页#response=urllib.request.urlopen("http://www.baidu.com")url="http://www.baidu.com"request = urllib.request.Request(url)response = urllib.request.urlopen(request)html = response.read().decode("utf-8")soup = BeautifulSoup(html, "html.parser")print (soup.prettify())
#_*_ coding:utf-8 _*_import urllib.requestimport http.cookiejarurl="http://www.baidu.com"print ("测试第一种方法")response1=urllib.request.urlopen(url)print (response1.getcode())print (len(response1.read()))print ("测试第二种方法")req2=urllib.request.Request(url)req2.add_header("User-Agent","Mozilla/5.0")response2=urllib.request.urlopen(req2)print (response2.getcode())print (len(response2.read()))print ("测试第三种方法")#创建cookie容器cj=http.cookiejar.CookieJar()#创建1个openeropener=urllib.request.build_opener(urllib.request.HTTPCookieProcessor(cj))#给urllib安装openerurllib.request.install_opener(opener)#使用带有cookie的urllib访问网页response3=urllib.request.urlopen(url)print (response3.getcode())print (len(response3.read()))print (cj) #打印cookie的内容
网页解析器
网页解析器
网页解析器:从网页中提取有价值数据的工具
网页解析器方法:正则表达式、html.parse、BeautifulSoup、lxml
0 0
- 网络爬虫:各种模板
- 【网络流各种模板】
- 网络流Dinic算法模板(各种优化)
- 网络爬虫
- 网络爬虫
- 网络爬虫
- 网络爬虫
- 网络爬虫
- 网络爬虫
- 网络爬虫
- 网络爬虫
- 网络爬虫
- 网络爬虫
- 网络爬虫
- 网络爬虫
- 网络爬虫
- 网络爬虫
- 网络爬虫
- [Codeforces goodbye2016] E.New Year and Old Subsequence 线段树
- 音乐播放器的音频条形图实现
- linux下ping命令的简单应用
- LeetCode 74. Search a 2D Matrix
- 韩顺平SqlServer数据库实例中的两张表
- 网络爬虫:各种模板
- Codeforces Round #306 (Div. 2) D. Regular Bridge 图论,构造,脑洞 1月26日
- CentOS 7 设置获取动态及静态IP地址
- [Codeforces goodbye2016] D. New Year and Fireworks
- vs2013 + qt5.3.2 环境搭建
- 集电极开路、漏极开路、上拉电阻、下拉电阻等接口相关基本概念
- GreenOpenCsharpWarper(GOCW)
- 【Android】Android自定义组件
- 大型网站核心架构要素