第一篇:爬虫入门request模块的基本使用以www.douban.com为例
get请求:
# 查看响应数据,返回的是Unicode格式的数据
# # 查看响应数据,返回的是字节流数据(图片视频等)
print(response.status_code)
1.想目标地址发起请求,携带heards和不携带heards的区别
url = "http://www.douban.com"
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36"
r = requests.get(url=url)
{'Connection': 'close', 'Date': 'Sat, 23 Sep 2023 14:46:44 GMT', 'Server': 'dae', 'Content-Length': '0'}
request模块用于测速发送数据的连通性,通过回复可以看出418,Connection:close表示未获取到服务器的返回值,需要添加heards信息,此服务器拒绝非浏览器发送的请求。
url = "http://www.douban.com"
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36"
r = requests.get(url=url, headers=heards)
{'Date': 'Sat, 23 Sep 2023 14:49:28 GMT', 'Content-Type': 'text/html; charset=utf-8', 'Transfer-Encoding': 'chunked', 'Connection': 'keep-alive', 'Keep-Alive': 'timeout=30', 'X-Xss-Protection': '1; mode=block', 'X-Douban-Mobileapp': '0', 'Expires': 'Sun, 1 Jan 2006 01:00:00 GMT', 'Pragma': 'no-cache', 'Cache-Control': 'must-revalidate, no-cache, private', 'Set-Cookie': 'ck="deleted"; max-age=0; domain=.douban.com; expires=Thu, 01-Jan-1970 00:00:00 GMT; path=/, dbcl2="deleted"; max-age=0; domain=.douban.com; expires=Thu, 01-Jan-1970 00:00:00 GMT; path=/, ll="108099"; path=/; domain=.douban.com; expires=Sun, 22-Sep-2024 14:49:28 GMT, bid=ArFHHYIPdMc; Expires=Sun, 22-Sep-24 14:49:28 GMT; Domain=.douban.com; Path=/', 'X-DAE-App': 'sns', 'X-DAE-Instance': 'home', 'X-DAE-Mountpoint': 'True', 'X-DOUBAN-NEWBID': 'ArFHHYIPdMc', 'Server': 'dae', 'X-Frame-Options': 'SAMEORIGIN', 'Strict-Transport-Security': 'max-age=15552000;', 'Content-Encoding': 'gzip'}
上图可以看出添加了头信息headers之后成功获取了返回值,一般情况下使用request模块发送请求爬虫时,默认情况下都需要添加头信息
2.携带params参数以百度为例
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/117.0.0.0 Safari/537.36"
url = "http://www.baidu.com/s?"
response = requests.get(url=url, params=kw, headers=heards)
response.encoding = 'utf-8'
print(response.status_code)
POST请求:
对于post来说我们一般需要为他构建一些参数传递也就是form表单,一般放入data中
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/117.0.0.0 Safari/537.36"
url = "https://wordpress-edu-3autumn.localprod.oc.forchange.cn/wp-login.php"
'redirect_to': 'https://wordpress-edu-3autumn.localprod.oc.forchange.cn',
response = requests.post(url=url, data=data, headers=heards)
response.encoding= 'utf-8'
第二篇:非结构化数据和结构化数据的处理
非结构化数据的处理
文本、电话号码、邮箱地址
HTML文件:
结构化数据的处理
三、Xpath详细使用:
1.什么是XPath
XPath是一门在XML文档中查找信息的语言,可用来在XML文档中对元素的属性进行遍历
2.XPath开发工具
- 开源的Xpath表达式编辑器工具XMLQuire(XML格式文件可用)
- Chrome插件XPath Helper
- Firefox插件XPath Checker
3.选取节点
XPath使用路径表达式来选取XML文档中的节点或者节点集,这些路径表达式和我们在常规电脑文件系统中看到的表达式非常相似
下面列取了常见的路劲表达式:
表达式 | 描述 |
nodename | 选取此节点的所有子节点 |
/ | 从根节点选取 |
// | 从匹配的训责的当前节点选择文档中的节点,从不考虑他们的位置 |
. | 选取当前节点 |
.. | 选取当前节点的父节点 |
@ | 选取属性 |
在下面表格中,列出了一些路径表达式以及表达式的结果:
| 路径表达式 |
bookstore | 选择bookstore元素的所有子节点 |
/bookstore | 选取根元素bookstore。注释:加入路径起始于/,则此路径使用代表到某元素的绝对位置 |
bookstore/book | 选取所有bookstore的子元素的所有book元素 |
//book | 选取所有book子元素,而不管他们在文档中的位置 |
bookstore//book | 选择数据bookstore元素的后代的所有book元素,而不管它们位置bookstore之下的射门位置 |
//@lang | 选取名为lang的所有属性 |
谓语(Predicates)
谓语用来查找某个特定的节点或者包含某个指定的值的节点,被嵌在方括号中
路径表达式 | 结果 |
/bookstore/book[1] | 选取数据bookstore子元素的第一个book元素 |
/bookstore/book[last()] | 选取数据bookstore子元素的最后一个book元素 |
/bookstore/book[last()-1] | 选取数据bookstore子元素的倒数第二个book元素 |
/bookstore/book[position()<3] | 选取最前面的两个属于bookstore元素的子元素的book元素 |
//title[@lang] | 选取所有拥有名为lang的属性的title元素 |
//title[@lang='eng'] | 选取所有title元素,且这些元素拥有值为eng的lang属性 |
/bookstore/book[price>35.00] | 选取bookstore元素所有book元素,且其中的price元素的值大于35.00 |
/bookstore/book[price>35.00]/title | 选取bookstore元素所有book元素的所有title元素,且其中的price元素的值大于35.00 |
选取未知节点
通配符 | 描述 |
* | 匹配任何元素节点 |
@* | 匹配任何属性节点 |
node() | 匹配任何类型节点 |
路径表达式 | 结果 |
/bookstore/* | 选取bookstore元素的所有子元素 |
//* | 选取文档中的所有元素 |
//title[@*] | 选取所有带有属性的title元素 |
选取若干路径
路径表达式 | 结果 |
//book/title | //book/price | 选取book元素的所哟有title和price元素 |
//title | //price | 选取文档中的所有title和price元素 |
/bookstore/book/title | //price | 选取属于bookstore元素的book元素的所有title元素,以及文档中所有的price元素 |