- # 查看响应数据,返回的是Unicode格式的数据
- print(response.text)
-
- # # 查看响应数据,返回的是字节流数据(图片视频等)
- print(response.content)
-
- # 查看完整url地址
- print(response.url)
-
- # 查看响应头部字符编码
- print(response.encoding)
-
- # 查看响应码
- print(response.status_code)
-
- print(response)
- import requests
- url = "http://www.douban.com"
- heards = {
- "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)
- print(r)
- print(r.headers)
-
- <Response [418]>
- {'Connection': 'close', 'Date': 'Sat, 23 Sep 2023 14:46:44 GMT', 'Server': 'dae', 'Content-Length': '0'}
request模块用于测速发送数据的连通性,通过回复可以看出418,Connection:close表示未获取到服务器的返回值,需要添加heards信息,此服务器拒绝非浏览器发送的请求。
- import requests
- url = "http://www.douban.com"
- heards = {
- "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)
- print(r)
- print(r.headers)
-
- <Response [200]>
- {'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模块发送请求爬虫时,默认情况下都需要添加头信息

- import requests
- heards = {
- "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?"
- kw = {
- 'wd': "python"
- }
- response = requests.get(url=url, params=kw, headers=heards)
- # 修改编码格式如果不修改获得的响应数据会乱码
- response.encoding = 'utf-8'
-
- # 查看响应数据,返回的是Unicode格式的数据
- print(response.text)
-
- # # 查看响应数据,返回的是字节流数据(图片视频等)
- print(response.content)
-
- # 查看完整url地址
- print(response.url)
-
- # 查看响应头部字符编码
- print(response.encoding)
-
- # 查看响应码
- print(response.status_code)
-
- print(response)
对于post来说我们一般需要为他构建一些参数传递也就是form表单,一般放入data中
- import requests
- heards = {
- "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"
- data = {
- 'log': 'hello',
- 'pwd': '123456',
- 'wp-submit': '登录',
- 'redirect_to': 'https://wordpress-edu-3autumn.localprod.oc.forchange.cn',
- 'testcookie': '1'
- }
- response = requests.post(url=url, data=data, headers=heards)
- response.encoding= 'utf-8'
- print(response.text)
XPath是一门在XML文档中查找信息的语言,可用来在XML文档中对元素的属性进行遍历
XPath使用路径表达式来选取XML文档中的节点或者节点集,这些路径表达式和我们在常规电脑文件系统中看到的表达式非常相似
| 表达式 | 描述 |
| nodename | 选取此节点的所有子节点 |
| / | 从根节点选取 |
| // | 从匹配的训责的当前节点选择文档中的节点,从不考虑他们的位置 |
| . | 选取当前节点 |
| .. | 选取当前节点的父节点 |
| @ | 选取属性 |
| 路径表达式 | |
| bookstore | 选择bookstore元素的所有子节点 |
| /bookstore | 选取根元素bookstore。注释:加入路径起始于/,则此路径使用代表到某元素的绝对位置 |
| bookstore/book | 选取所有bookstore的子元素的所有book元素 |
| //book | 选取所有book子元素,而不管他们在文档中的位置 |
| bookstore//book | 选择数据bookstore元素的后代的所有book元素,而不管它们位置bookstore之下的射门位置 |
| //@lang | 选取名为lang的所有属性 |
| 路径表达式 | 结果 |
| /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元素 |