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 requestsdef GetHTMLText (url ): try : header = {'user-agent' :'Mozilla/5.0' } r = requests.get(url,headers=header) r.raise_for_status() 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 webdriverbrowser = 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' ) third = browser.find_element_by_xpath('//*[@id="q"]' ) print (first,second,third)from selenium.webdriver.common.by import Bycommon = 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 webdriverimport timebrowser = webdriver.Chrome() browser.get("https://www.taobao.com" ) input = browser.find_element_by_id('q' ) input .send_keys('iPhone' ) time.sleep(1 ) input .clear()input .send_keys('iPad' )button = browser.find_element_by_class_name('btn_search' ) button.click()
实例 爬取图片、视频等 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 import requestsimport osurl = "" 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 ("爬取失败" )