学习python网络数据采集笔记-1、2章
英文不好只能看中文版的。邮电出版社翻译的真很烂。
以上是吐槽,以下是正文。
书中用的pthon 3.X版本,建议安装python3.4以上的版本,低版本的没有自带pip安装插件会比较麻烦。
下载地址:https://www.python.org/downloads/windows/
1.1注意乌鸦处提示,如果用2.x的版本后面写urllib.request处替换成urllib或者urllib2.
1.2.1 安装包命令一定不要写错 pip install beatifulsoup4
1.2.2 用html.read() 读取网页中ccs样式里的h1标签的内容
#! /usr/bin/env python
#coding=utf-8
from urllib.request import urlopen
#3.*版本是这样的,2.*去掉后面.request,参照1.1乌鸦处提示
from bs4 import BeautifulSoup
html = urlopen("http://www.pythonscraping.com/pages/page1.html")
bsObj=BeautifulSoup(html.read())
print(bsObj.h1.get_text())
1.2.3设置报错
网页不存在 except HTTPError as e:
服务器不存在 if html is None
属性错误: except AttributeError as e:
如何创建函数,返回报错。
#! /usr/bin/env python
#coding=utf-8
from urllib2 import urlopen
from bs4 import BeautifulSoup from urllib2 import HTTPError def getTitle(url):
try:
html =urlopen(url)
except HTTPError as e:
#e为异常对象实例
return None
try:
bsObj=BeautifulSoup(html.read())
title=bsObj.body.h1
except AttributeError as e:
return None
return title
title=getTitle("http://www.pythonscraping.com/pages/pageee1.html")
#这里指定一个无法找到的页面
if title == None:
print("title could not be found")
else:
print(title)
2.2根据标签属性抽取文字
namelist=bsObj.findAll("span",{"class":"green"}
#这里需要主要的是findAll中的A必须要大写。
get_text()是起到删除标签作用,可以将其添加print(bsObj.h1.get_text())中,运行删除h1标签
2.2.1 find和findAll的差别,可用limit限制findAll的寻找层数,具体差别出了limit限制完全没看明白
2.2.2 beautifulsoup的对象
普通对象 bsObj
标签Tag对象 bsObj.div.h1
NAvigablesString对像 标签里面的文字
Comment对象 查找注释文字<!--***-->
2.2.3导航树--子、兄弟、父标签
子标签(children)和后代标签(descendant)
from urllib.request import urlopen
from bs4 import BeautifulSoup
html = urlopen("http://www.pythonscraping.com/pages/page3.html")
bsObj=BeautifulSoup(html)
#比1.2中省略了.read()
for child in bsObj.find("table",{"id":"giftList"}).children:
#.children是子对象,.descendants是所有后代
print (child)
兄弟标签
from urllib.request import urlopen
from bs4 import BeautifulSoup
html = urlopen("http://www.pythonscraping.com/pages/page3.html")
bsObj=BeautifulSoup(html)
for sibling in bsObj.find("table",{"id":"giftList"}).tr.next_siblings:
#.tr提取标题行
#.next_siblings提取除标题行外的数据
#.previous_siblings提取最后一行外的数据
#上面两个去掉s只返回单个标签
print (sibling)
父标签
from urllib.request import urlopen
from bs4 import BeautifulSoup
html = urlopen("http://www.pythonscraping.com/pages/page3.html")
bsObj=BeautifulSoup(html)
print (bsObj.find("img",{"src":"../img/gifts/img1.jpg"}).parent.previous_sibling.get_text())
#翻译下来就是打印图片img1.jpg父亲的上级兄弟的删除标签结果。
2.3正则表达式。
此处延伸扩展就能单独一篇这里不多介绍,站长工具里面有正则表达式工具。
2.4正则表达式和Beautifulsoup
from urllib.request import urlopen
from bs4 import BeautifulSoup
html = urlopen("http://www.pythonscraping.com/pages/page3.html")
bsObj=BeautifulSoup(html)
import re
images=bsObj.findAll("img",{"src":re.compile("\.\.\/img\/gifts/img.*\.jpg")})
for image in images:
print(image["src"])
2.5获取属性
介绍的太简单我也看不明白
2.6Lambda表达式
暂时没有接触过
2.7采集还有很多其他的之前用urllibe和urllibe2爬过微博
学习python网络数据采集笔记-1、2章的更多相关文章
- 20190715《Python网络数据采集》第 1 章
<Python网络数据采集>7月8号-7月10号,这三天将该书精读一遍,脑海中有了一个爬虫大体框架后,对于后续学习将更加有全局感. 此前,曾试验看视频学习,但是一个视频基本2小时,全部拿下 ...
- 笔记之Python网络数据采集
笔记之Python网络数据采集 非原创即采集 一念清净, 烈焰成池, 一念觉醒, 方登彼岸 网络数据采集, 无非就是写一个自动化程序向网络服务器请求数据, 再对数据进行解析, 提取需要的信息 通常, ...
- 学习爬虫:《Python网络数据采集》中英文PDF+代码
适合爬虫入门的书籍<Python网络数据采集>,采用简洁强大的Python语言,介绍了网络数据采集,并为采集新式网络中的各种数据类型提供了全面的指导.第一部分重点介绍网络数据采集的基本原理 ...
- Python网络数据采集PDF
Python网络数据采集(高清版)PDF 百度网盘 链接:https://pan.baidu.com/s/16c4GjoAL_uKzdGPjG47S4Q 提取码:febb 复制这段内容后打开百度网盘手 ...
- Python网络数据采集PDF高清完整版免费下载|百度云盘
百度云盘:Python网络数据采集PDF高清完整版免费下载 提取码:1vc5 内容简介 本书采用简洁强大的Python语言,介绍了网络数据采集,并为采集新式网络中的各种数据类型提供了全面的指导.第 ...
- Python网络数据采集7-单元测试与Selenium自动化测试
Python网络数据采集7-单元测试与Selenium自动化测试 单元测试 Python中使用内置库unittest可完成单元测试.只要继承unittest.TestCase类,就可以实现下面的功能. ...
- Python网络数据采集6-隐含输入字段
Python网络数据采集6-隐含输入字段 selenium的get_cookies可以轻松获取所有cookie. from pprint import pprint from selenium imp ...
- Python网络数据采集4-POST提交与Cookie的处理
Python网络数据采集4-POST提交与Cookie的处理 POST提交 之前访问页面都是用的get提交方式,有些网页需要登录才能访问,此时需要提交参数.虽然在一些网页,get方式也能提交参.比如h ...
- Python网络数据采集3-数据存到CSV以及MySql
Python网络数据采集3-数据存到CSV以及MySql 先热热身,下载某个页面的所有图片. import requests from bs4 import BeautifulSoup headers ...
随机推荐
- LINQ to JavaScript
JSLINQ 是一个将LINQ对象转化为JavaScript对象的工具 .它是构建在JavaScript的数组对象的基础上进行转换的,如果您使用的是一个数组,你可以使用LINQ到javascript ...
- Android SimpleAdapter源码详解
一直没认真看过android的源码,也不太敢看,稀里糊涂也敲了一年的代码,现在想好好学习了,就把常用的源码都看了一下,小伙伴们来涨姿势吧,有错误的地方,直接指出,我脸厚不怕丢人.来吧. 刚开始学and ...
- Android(java)学习笔记140:SpannableString类的使用
我们之前说过了我们想实现在TextView组件之中,可以显示URL.Email等特殊信息,这些信息点击可以实现跳转,真正意义上的超链接 要实现上面的需求就要SpannableString这个类. 因为 ...
- 2016iweb峰会参会总结
2016年8月27日去国家会议中心参加iweb峰会. 8点半开始签到入场,8点20分排队签到的人已经排到另一个门口,人超级多啊. 9点一如既往的由h5女神娜姐开场. 上午场 基本是各公司的大佬们介绍各 ...
- Java并发——同步工具类
CountDownLatch 同步倒数计数器 CountDownLatch是一个同步倒数计数器.CountDownLatch允许一个或多个线程等待其他线程完成操作. CountDownLatch对象 ...
- Linux C —— 多线程
为了防止无良网站的爬虫抓取文章,特此标识,转载请注明文章出处.LaplaceDemon/ShiJiaqi. http://www.cnblogs.com/shijiaqi1066/p/5769417. ...
- python杂乱有关类与对象
在python的类中,一般里面的方法和属性默认都是publlic,如果要设为private,即自己访问,主要是根据命名方式来区分的,通过__ 两个下划线加在名字前面,即为私有方法和私有属性 构造方法 ...
- .net开发---自定义页面打印区域
自定义页面打印区域 有3种办法: 办法一:将不需要打印的部位隐藏掉 Examp: <%-- (1)使用css样式,定义一个.noprint的class,将不打印的内容放入这个class内. -- ...
- VIEW层AJAX提交表单到Controller的实体
在MVC环境中,AJAX方式添加一个对象,这个对象在Models中是一个视图模型,在前台显示时是这样的代码: <%using (Html.BeginForm()) { %> ...
- javascript创建对象和属性的几种方式
一句话,javascript里面的对象,即是函数.方法. (一)第一种: a.声明对象:var JHSoft = JHSoft || {}; 或者 var JHSoft=new Object(); b ...