爬虫的具体步骤
1、所需要数据对应的真实URL地址
2、找到对应的请求方式
3、使用第三方包,构造请求(注意需要进行伪装,headers的伪装,最重要的是需要进行浏览器伪装–User-Agent)
4、发送请求
5、收到响应之后,需要对响应体数据进行解析(普通的页面text,如果是多媒体文件是content)
6、将拿到的页面或者多媒体文件按照需求进行提取(正则)
7、将获取到的目标文件进行保存
html 与xml
作用 | ||
---|---|---|
XML | 可扩展标记语言 | XML 被设计用来传输和存储数据,它的焦点内容是数据 |
HTML | 超文本标记语言 | 显示数据以及如何更好的显示数据 |
HTML_DOM | 文档对象模型 | 可以通过html_dom,访问所有的HTML元素 |
xml实例以及部分知识点
<bookstore>
先辈(bookstore)--后代(price,year)
<book category="COOKING">
<title lang="en">Everyday Italian</title>
<author>Giada De Laurentiis</author>
<year>2005</year>
<price>30.00</price>
</book>
<book category="CHILDREN">
<title lang="en">Harry Potter</title>
<author>J K. Rowling</author>
<year>2005</year>
<price>29.99</price>
</book>
<book category="WEB">
<title lang="en">Learning XML</title>
<author>Erik T. Ray</author>
<year>2003</year>
<price>39.95</price>
</book>
</bookstore>
#详情请移步W3C,讲的完善
父 | 每一个元素以属性都有一个父类 |
子 | 元素节点可以有零个,一个或者多个子 |
同胞 | 拥有相同的父节点 |
先辈 | 某节点的父,父的父。。。。。 |
后代 | 某一个节点的子,子的子。。。。。 |
路径表达式
表达式 | 说明 |
---|---|
/ | 代表从根节点选取 |
// | 从当前文档的任何位置找起,只要符合节点就行 |
@ | 选取的是属性 |
. | 当前节点 |
… | 当前节点的父节点 |
举例:
从根节点找起:/html/body/div[9]/div/ul/li[3]/a
/html | 选取的是根元素html |
//div | 选取的是所有的div子元素,不考虑节点在文档中的位置 |
div//span | 选择属于div元素的后代中所有的span元素,不管它位于div标签下的任何位置 |
//ul[@class=‘easyList’] | 相关的表达式的配合使用 |
//@class | 选择名为class的属性 |
xpath etree的作用
str1 = '''
<div>this is a div
'''
doc = etree.HTML(str1)
str2 = etree.tostring(doc)
print(str2)
展示:
b'<html><body><div>this is a div\n</div></body></html>'
注意点:
1、tostring()转换的字符串是bytes类型
2、lxml可以补齐缺失的HTML标签,还可以自动添加html 和 body标签
测试
不建议直接在网页上直接爬取,因为很多时候第一次不可能成功爬取,次数多了就会出现403错误,这是最头疼的,所以要进行测试在运用
import requests
url = 'https://hz.qk365.com/'#需要爬取的网页地址
html_str = requests.post(url=url).text
print(html_str)
#拿到该页面下的所有html内容,然后复制所有的东西到新的一个py文件里建个字符串然后全部粘贴进去合起就可以开始测试
#记住url后加上header内容(User-Agent),莫瞎裸奔,一奔就被捉住隔离(坏笑)
import requests
from lxml import etree
html_str='''粘贴过来的内容'''
html_doc=etree.HTML(html_str)#记住要转,html_str就是自己命名的粘贴过来字符串名字
ret = html_doc.xpath('//span/i/text()')
print(ret)
注意点:
1、text()获取标签扩起来的内容,即i标签下的所有文本内容
2、xpath返回的数据类型是一个列表
3、尽量次数少的爬取网页。鬼知道下一次就没有被发现
爬取实例见下贴