python网络数据采集第三版非扫描_Python网络数据采集总结

前几天看完了《Python网络数据采集》,对重点的主要内容总结一下。

目录

第一部分 创建爬虫第一章 初见网络爬虫

第二章 复杂HTML解析

第三章 开始采集

第四章 使用API

第五章 存储数据

第六章 读取文档

第二部分 高级数据采集第七章 数据清洗

第八章 自然语言处理

第九章 穿越网页表单与登录窗口进行采集

第十章 采集JavaScript

第十一章 图像识别与文字处理

第十二章 避开采集陷阱

第一章 初见网络爬虫

1.1 网络连接

互联网实现过程:

①电脑发送一串比特值(表示电路上高低电压),构成包括了请求头(包含当前本地路由器的MAC地址和对方的IP地址)和消息体(包含本地对服务器应用的请求)的信息。

②本地路由器收到所有1和0的比特值,并将其当成数据包,从本地MAC地址发送到服务器IP地址,其中,本地路由器会把数据包“盖上”自己的IP地址作为发件地址,然后通过互联网发送出去。

③途中会经过一些中介服务器,然后到达所请求得服务器

④服务器此时在IP地址中收到数据包。

⑤服务器读取数据包里的请求头里的目标端口(一般是网络应用的80端口,可以简单理解为数据包的“房间号”,IP就是“街道地址”),然后传到对应的应用——网络服务器应用上。

⑥网络服务器应用从服务器处理器收到一串数据:这是一个GET请求

请求文件index.html

⑦网络服务器应用找到对应的HTML文件,把它打包成一个新的数据包发送给本地服务器,然后通过服务器的本地服务器发送到我们的电脑上。

urllib的使用

from urllib.request import urlopen

html = urlopen("网址")

print(html.read())

注:python2里是urllib2,但与urllib有些细微子模块方面的差别。

1.2 BeautifulSoup简介

安装

pip3 install beautifulsoup4

运行

from urllib.request import urlopen

from bs4 import BeautifulSoup

html = urlopen("网址")

bsObj = BeautifulSoup(html.read())

print(bsObj.h1)

第二章 复杂HTML解析

2.1 不是一直都要用锤子

不要像这样写代码来抽取内容:

bsObj.findAll("table")[4].findAll("tr")[2].find("td").findAll("div")[1].find("a")

因为一旦网址源代码改了,就会失效

2.2 再端一碗BeautifulSoup

CSS的发明使得HTML的元素呈现出差异化,使得具有完全相同修饰的元素呈现不同的样式。比如:

爬虫可以通过不同的class(或id)来区分不同的值,例如:

from urllib.request import urlopen

from bs4 import BeautifulSoup

html = urlopen("http://www.pythonscraping.com/pages/warandpeace.html")#此网址为书中的网址

bsObj = BeautifulSoup(html)

nameList = bsObj.findAll("span", {"class":"green"})#here

for name in nameList:

print(name.get_text())#get_text()方法能够清除html文档中的标签,只剩下不带标签的文字

2.2.1 BeautifulSoup的find()和findAll()

作用:通过标签的不同属性轻松地过滤 HTML 页面,查找需要的标签组或单个标签。

定义:

findAll(tag, attributes, recursive, text, limit, keywords)#limit=1时两者无区别

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

一般只使用前两个参数,分别代表标签(例如:h1,span等等)和属性(例如:class,id)。keywords使用class时易出错,可换成class_

其他参数用到时可以查看官方文档或其他的教程。(其实是因为我懒得写了(ง •_•)ง)

2.2.2 其他BeautifulSoup对象NavigableString对象

用来表示标签里的文字。Comment对象

用来查找HTML文档的注释标签。

2.2.3 导航树

定义:通过标签在文档中的位置来查找标签。

1.处理子标签和其他后代标签(children)

from urllib.request import urlopen

from bs4 import BeautifulSoup

html = urlopen("http://www.pythonscraping.com/pages/page3.html")#书中用于测试的网站

bsObj = BeautifulSoup(html)

for child in bsObj.find("table",{"id":"giftList"}).children:

print(child)

2.处理兄弟标签(next_siblings)

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:

print(sibling)

3.父标签处理(parent和parents)

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())

休息一会

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值