0%

阅读全文 »

记录所有项目工作日志以便查询,年份、项目号分类
阅读全文 »

HTTP

URL格式:http://host[:port][path]
host:合法的Internet主机域名或IP地址
port:端口号,默认为80
path:请求资源的路径

Urllib

Urllib库|说明
:|:
urllib.request | 请求模块
urllib.error | 异常处理模块
urllib.parse | url解析模块
urllib.robotparser | robots.txt解析模块

urllib.request.urlopen(url,data=None,[timeout,]*,cafile=None,cadefault=False,context=None)

Requests

1
r = requests.get(url,params=None,**kwargs)

Requests方法 | 说明
:|:
requests.request() | 构造一个请求,支撑以下各方法
requests.get() | 获取HTML网页,对应HTTP的GET
requests.head() | 获取HTMLheader,对应HTML的HEAD
requests.post() | 向HTML网页提交POST请求
requests.put() | 向HTML网页提交PUT请求
requests.patch() | 向HTML网页提交局部修改请求
requests.delete() | 向HTML网页提交删除请求

Requests对象属性|说明
:|:
r.status_code |HTTP请求返回的状态,200连接成功,404表示失败
r.text |HTTP响应内容的字符串形式,URL对应的页面内容
r.encoding |HTTP header中猜测的响应内容编码方式
r.apparent_encoding |内容中分析出的响应内容编码格式(备选编码格式)
r.content | HTTP响应内容的二进制格式

r.encoding:如果header中不存在charset,则默认编码为ISO-8859-1(不支持解析中文)
将r.apparent_encoding设置为utf-8可解决上述可能出现乱码问题

baidu搜索关键词

百度搜索关键词对应:wd=keyword

1
2
3
kv = {'wd':'Python'}
r = requests.get("http://www.baidu.com/s",params = kv)

通用代码框架

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import requests

def GetHTMLText(url):
try:
header = {'user-agent':'Mozilla/5.0'}
r = requests.get(url,headers=header)
r.raise_for_status() #如果状态不是200则引发HTTPError异常
r.encoding = r.apparent_encoding
return r.text
except:
return "异常"

if __name__ == "__main__":
url = "http://"
print(GetHTMLText(url))

信息标记形式

XML

标签、属性、内容

1
2
3
<name> ... </name>
<name />
<!-- -->

JSON

有类型的键值对表示
无法注释

1
2
3
"key":"value"
"key":["value1","value2"]
"key":{"subkey":"subvalue"}

YAML

无类型键值对

1
2
3
4
5
6
key:value
key:#comments
-value1
-value2
key:
subkey:subvalue

Selenium

声明浏览器对象

1
2
3
4
5
6
7
from selenium import webdriver

browser = webdriver.Chrome()
browser = webdriver.Firefox()
browser = webdriver.Edge()
browser = webdriver.Safari()
browser = webdriver.PhantomJS()
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 打开网页
browser = webdriver.Chrome()
browser.get("https://www.baidu.com")
print(browser.page_source)
browser.close()

#查找单个元素
first = browser.find_element_by_id('q')
second = browser.find_element_by_css_selector('#q')# #表示id,.表示类,不加前缀表示标签
third = browser.find_element_by_xpath('//*[@id="q"]')
print(first,second,third)

## 通用方法
from selenium.webdriver.common.by import By
common = browser.find_element(By.ID,'q')
commons = browser.find_elements(By.ID,'q') # 查找多个元素
browser.close()

元素交互

实现淘宝搜索功能

1
2
3
4
5
6
7
8
9
10
11
12
from selenium import webdriver
import time

browser = webdriver.Chrome()
browser.get("https://www.taobao.com")
input = browser.find_element_by_id('q') #找到网页中搜索框对应的id
input.send_keys('iPhone') #向搜索框中传递的参数
time.sleep(1)
input.clear()
input.send_keys('iPad')
button = browser.find_element_by_class_name('btn_search') #找到搜索按钮对应的name
button.click()

实例

爬取图片、视频等

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import requests
import os
url = ""
root = "D://Python//Pic"
path = root + url.split('/')[-1]
try:
if not os.path.exists(root):
os.mkdir(root)
if not os.path.exists(path):
r = requests.get(url)
with open(path,'wb') as f
f.write(r.content)
f.close()
print("文件保存成功")
else:
print("文件已存在")
except:
print("爬取失败")

应用层-表示层-会话层---HTTP/FTP/DNS/Telnet... 传输层---TCP/UDP 网络层---IP/ARP/ICMP/RARP 数据链路层 物理层
阅读全文 »

Google Chrome 利用IDM下载器下载资源,可下载百度网盘资源
阅读全文 »