• 如果你用过 Python 2.x 里的 urllib2 库,可能会发现 urllib2 与 urllib 有些不同。在 Python 3.x 里,urllib2改名为 urllib,被分成一些子模块: urllib.request 、urllib.parse 和 urllib.error 。尽管函数名称大多和原来一样,但是在用新的 urllib 库时需要注意哪些函数被移动到子模块里了。

urlopen 用来大家并读取一个从网络获取的远程对象。

from urllib.request  import u rlopen
html = urlopen("http://pythonscraping.com/pages/page1.html")
print(html.read())
  • BeautifulSoup通过定位 HTML 标签来格式化和组织复杂的网络信息,用简单易用的 Python 对象为我们展现 XML 结构信息。
from urllib.request import urlopen
from urllib.error import HTTPError
from bs4 import BeautifulSoupdef getTitle(url):try:html = urlopen(url)except HTTPError as e:print(e)return Nonetry:bsObj = BeautifulSoup(html.read(), "lxml")title = bsObj.body.h1except AttributeError as e:print(e)return Nonereturn titletitle = getTitle("http://pythonscraping.com/pages/page1.html")
if title == None:print("Title could not be found!")
else:print(title)
  • 复杂的HTML解析
from urllib.request import urlopen
from urllib.error import HTTPError
from bs4 import BeautifulSouptry:html = urlopen("http://www.pythonscraping.com/pages/warandpeace.html")
except HTTPError as e:print(e)try:bsObj = BeautifulSoup(html, "lxml")
except AttributeError as e:print(e)namelist = bsObj.findAll("span", {"class":"green"})
for name in namelist:print(name.get_text())
  • findAll()和find()

findAll(tag, attributes, recursive, text, limit, keywords)

find(tag, attributes, recursive, text, keywords)

tag::传一个标签名称或多个标签组成的列表

attributes:传一个Python字典封装一个标签的若干属性和属性值。例如:.findAll("span", {"class":{"green", "red"}})

recursive:是一个递归参数,要求传一个布尔变量,默认值是Ture,所以findAll默认会去查找标签参数的所有子标签,以及子标签的子标签。改为False,findAll就至查找文档的以及标签。

text:用标签的文本内容去匹配,而不是标签的属性。

limit:范围限制参数,显然只用于findAll,find其实等价与findAll中的limit=1的情况。limit参数设置后,它的返回的前limit项结果是按照网页上的顺序排序的。

keyword:可以让你选择指定属性的标签,是BeautifulSoup设置的一个冗余功能,可替代,且偶尔会出现问题。例如bsObj.findAll(class="green"),会产生一个语法错误,因为class是Python的保留字。

  • get_text()

.get_text() 会把你正在处理的 HTML 文档中所有的标签都清除,然后返回一个只包含文字的字符串。假如你正在处理一个包含许多超链接、段落和标签的大段源代码,那么 .get_text() 会把这些超链接、段落和标签都清除掉,只剩下一串不带标签的文字。

  • 导航树
  • 子标签和后代标签
from urllib.request import urlopen
from urllib.error import HTTPError
from bs4 import BeautifulSouptry:html = urlopen("http://www.pythonscraping.com/pages/page3.html")
except HTTPError as e:print(e)try:bsObj = BeautifulSoup(html, "lxml")
except AttributeError as e:print(e)for child in bsObj.find("table", {"id":"giftList"}).children:print(child)
  • 处理兄弟标签
from urllib.request import urlopen
from urllib.error import HTTPError
from bs4 import BeautifulSouptry:html = urlopen("http://www.pythonscraping.com/pages/page3.html")
except HTTPError as e:print(e)try:bsObj = BeautifulSoup(html, "lxml")
except AttributeError as e:print(e)for sibling in bsObj.find("table", {"id":"giftList"}).tr.next_siblings:print(sibling)
  • 父标签处理
from urllib.request import urlopen
from urllib.error import HTTPError
from bs4 import BeautifulSouptry:html = urlopen("http://www.pythonscraping.com/pages/page3.html")
except HTTPError as e:print(e)try:bsObj = BeautifulSoup(html, "lxml")
except AttributeError as e:print(e)print(bsObj.find("img", {"src":"../img/gifts/img1.jpg"}).parent.previous_sibling.get_text())
  • 正则表达式

邮箱:[A-Za-z0-9\._+]+@[A-Za-z]+\.(com|org|edu|net)


from urllib.request import urlopen
from urllib.error import HTTPError
from bs4 import BeautifulSoup
import retry:html = urlopen("http://www.pythonscraping.com/pages/page3.html")
except HTTPError as e:print(e)try:bsObj = BeautifulSoup(html, "lxml")
except AttributeError as e:print(e)images = bsObj.findAll("img", {"src":re.compile("\.\.\/img\/gifts\/img.*\.jpg")})
for img in images:print(img["src"])
  • 获取属性
  • 对于一个标签可以用myTag.attrs获取所有属性
  • myTag.attrs["src"]表示myTag的src的属性
from urllib.request import urlopen
from urllib.error import HTTPError
from bs4 import BeautifulSoup
import retry:html = urlopen("http://www.pythonscraping.com/pages/page3.html")
except HTTPError as e:print(e)try:bsObj = BeautifulSoup(html, "lxml")
except AttributeError as e:print(e)images = bsObj.findAll("img", {"src":re.compile("\.\.\/img\/gifts\/img.*\.jpg")})
for img in images:print(img.attrs["src"])

《Python 网络数据采集》正则表达式相关推荐

  1. 通过正则表达式校验手机号码,拿走即用!

    校验手机号码 2021/01/06更新,电信新增了191号段 1. 单纯校验长度 2.正则表达式校验数字 3.正则表达式校验是否是大陆号码 4.正则表达式校验是否是香港号码 //校验长度private ...

  2. Linux shell 学习笔记(15)— shell 正则表达式

    1. 定义 BRE 模式 1.1 纯文本 第一条原则就是:正则表达式模式都区分大小写.这意味着它们只会匹配大小写也相符的模式. $ echo "This is a test" | ...

  3. re2正则表达式匹配引擎的c接口版本cre2的中文使用手册

    前言 re2 官方地址: https://github.com/google/re2 cre2 官方地址: https://github.com/marcomaggi/cre2 1 基本类型定义 不透 ...

  4. 正则表达式(括号)、[中括号]、{大括号}的区别小结

    正则表达式(括号).[中括号].{大括号}的区别小结 </h1><div class="clear"></div><div class=& ...

  5. Python中正则表达式用法 重点格式以这个为准_首看_各种问题

    20210811 https://www.jb51.net/article/101258.htm 一.惰性模式的概念: 此模式和贪婪模式恰好相反,它尽可能少的匹配字符以满足正则表达式即可,例如: va ...

  6. 正则语法完全正则表达式手册_语法格式重点

    20211202 https://blog.csdn.net/lc11535/article/details/103266263 该表达式打开re.U(re.UNICODE)标志. python –& ...

  7. 正则表达式 - 语法

    正则表达式(regular expression)描述了一种字符串匹配的模式(pattern),可以用来检查一个串是否含有某种子串.将匹配的子串替换或者从某个串中取出符合某个条件的子串等. 例如: r ...

  8. 正则表达式中的\.表示什么意思

    \ 这是引用符,用来将这里列出的这些元字符当作普通的字符来进行匹配.例如正则表达式\$被用来匹配美元符号,而不是行尾,类似的,正则表达式\.用来匹配点字符,而不是任何字符的通配符.

  9. ?:在正则表达式中什么意思

    "?:"非获取匹配,匹配冒号后的内容但不获取匹配结果,不进行存储供以后使用. 单独的"?":匹配前面的子表达式零次或一次. 当"?"紧跟在任 ...

  10. 关于正则表达式 \1 \2之类的问题

    我们创建一个正则表达式 var RegExp = /^(123)(456)\2\1$/; 这个正则表达式匹配到的字符串就是 123456456123 创建另外第二正则表达式 var RegExp1 = ...

最新文章

  1. loj #6053 简单的函数 min_25筛
  2. Linux 增大Swap
  3. redis分片_5000+字硬核干货!Redis 分布式集群部署实战
  4. java launcher 下载_Java Launcher下载并安装
  5. html文件设置断点调试,断点调试
  6. 多线程的那点儿事(之嵌套锁)
  7. Java程序员须知的七个日志管理工具
  8. Git版本控制:Git远程仓库
  9. 你对自己未来五年的职业规划是什么
  10. 苹果开发者证书报错证书不受信任
  11. grunt源码解析1——如何安装grunt:grunt命令是怎样运行起来的
  12. Cauchy distribution
  13. 源中瑞区块链baas平台一站式服务体系
  14. thinkphp6学习教程与源码 tp6开源CMS系统源码研究
  15. 学习笔记——数据的度量
  16. 闽江学院计算机与控制工程学院在哪个校区,计算机与控制工程学院举行优秀校友分享会...
  17. Linux基础命令-进程与系统性能
  18. 量化选股——基于动量因子的行业风格轮动策略(第2部分—策略回测)
  19. python的内存调优_python内存机制与垃圾回收、调优手段
  20. 通过修改rom包永久获取root权限和所有应用调试功能ro.debuggable

热门文章

  1. StarlingMVC Framework中文教程
  2. 【yii2调试神器】yii2-debug能力分析和配置项解析
  3. 令子元素垂直居中(并且子元素的高度不固定)
  4. RedHat 6 安装配置Tomcat 7
  5. linux批量备份服务器配置文件和目录的脚本
  6. 网站测试自动化系统—系统应该有的功能
  7. extra energy theory
  8. cheat sheet for cs221 at stanford: good luck
  9. 教育孩子的一个很棒的方式
  10. 不知道什么期刊会议是国内计算机行业所承认的好会,顶会?中国计算机协会ccf了解一下!祝你圆梦顶刊、顶会