# 中文亂碼php
#處理中文亂碼 import requests from lxml import etree from urllib import request url = 'http://pic.netbian.com/4kqiche/' headers = { 'User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36' } response = requests.get(url=url,headers=headers) #響應 #手動設置響應數據的編碼 # response.encoding = 'utf-8' page_text = response.text tree = etree.HTML(page_text) #實例化 li_list = tree.xpath('//div[@class="slist"]/ul/li') for li in li_list: img_src = li.xpath('./a/img/@src')[0] img_name = li.xpath('./a/b/text()')[0] # 通用性 img_name = img_name.encode('iso-8859-1').decode('gbk') #西歐 向下兼容ascii 通常瀏覽器默認的文本編碼格式 request.urlretrieve(url="http://pic.netbian.com"+img_src,filename='./圖片/%s.jpg'%img_name) #相對路徑 # request.urlretrieve(url="http://pic.netbian.com"+img_src,filename=r'C:\spider\day01\圖片\%s.jpg'%img_name) #絕對路徑 print(img_name,'0k') print('OK')
1 鏈接池報警 請求頭改 Connection: keep-alive 爲close User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.81 Safari/537.36 2 代理IP 在IP被封禁後 3 每次請求之間sleep進行間隔等待
模擬登錄 -- 爬取基於某些用戶的用戶信息
驗證碼識別:雲打碼平臺 http://www.yundama.com/ 打碼兔 超級鷹
使用流程:
註冊
登錄:
普通用戶:
查詢剩餘提分(充值) http://www.yundama.com/price.html
開發者用戶:
建立軟件:個人軟件-》添加新軟件(ID,祕鑰)
下載示例代碼:開發文檔-》點此下載:雲打碼接口DLL-》PythonHTTP示例下載
代理:代理服務器 - 快代理 - 西祠代理 - goubanjia 匿名度: 透明:對方服務器知道你使用了代理ip也知道你的真實ip 匿名:知道你使用了代理ip可是不知道你的真實ip 高匿:什麼都不知道 類型: http:只能夠發起http請求 https:只能夠發起https的請求
# 代理池
import requests url = 'http://www.baidu.com/s?wd=ip' headers = { 'User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36' } page_text = requests.get(url=url,headers=headers,proxies={'http':'117.127.0.202:80'}).text with open('./ip.html','w',encoding='utf-8') as fp: fp.write(page_text)
# 構建代理池
http_list = [
{'http':'60.190.250.120:8080'},
{'http':'60.190.250.120:8080'},
{'http':'60.190.250.120:8080'}
]
https_list = [
{'https':'60.190.250.120:8080'},
{'https':'60.190.250.120:8080'},
{'https':'60.190.250.120:8080'}
]html
# selenium 自動化jquery
# 用來完成瀏覽器自動化相關的操做,能夠經過代碼的形式制定一些基於瀏覽器自動化的(行爲動做),當代碼執行後,瀏覽器就會自動觸發定義的事件. - 環境安裝: pip install selenium 下載對應瀏覽器的驅動軟件 http://chromedriver.storage.googleapis.com/index.html 查看驅動和瀏覽器版本的映射關係: http://blog.csdn.net/huilan_same/article/details/51896672
- 編碼流程:
- 導包
- 實例化某一款瀏覽器對象
- 制定相關行爲動做
Selenium支持很是多的瀏覽器,如Chrome、Firefox、Edge等,還有Android、BlackBerry等手機端的瀏覽器。另外,也支持無界面瀏覽器PhantomJS。
PhantomJS 如今中止維護更新了,不建議使用,在無界面領域,建議google的chrome無頭.
https://www.cnblogs.com/bobo-zhang/p/9685362.html 更多請瀏覽這個link
# 簡單的百度自動化處理 chromedriver.exe是個軟件
from selenium import webdriver # web驅動 顯式的自動化瀏覽器操做 from time import sleep bro = webdriver.Chrome(executable_path='./chromedriver.exe') bro.get('https://www.baidu.com') sleep(2) # 標籤訂位 tag_input = bro.find_element_by_id('kw') tag_input.send_keys('人民幣') btn = bro.find_element_by_id('su') btn.click() sleep(2) bro.quit() # 退出
from selenium import webdriver # 顯式的Js滾輪操做 from time import sleep bro = webdriver.Chrome(executable_path='./chromedriver.exe') bro.get('https://xueqiu.com') sleep(5) # 執行js實現滾輪向下滑動 js = "window.scrollTo(0,document.body.scrollHeight)" bro.execute_script(js) sleep(2) bro.execute_script(js) sleep(2) bro.execute_script(js) sleep(2) bro.execute_script(js) sleep(2) bro.execute_script(js) sleep(2) # 加載更多的處理 a_tag = bro.find_element_by_xpath('//*[@id="app"]/div[3]/div/div[1]/div[2]/div[2]/a') a_tag.click() sleep(5) # 獲取當前瀏覽器頁面數據(動態數據) bro.page_source # 可print bro.quit() # 退出
# 一款無可視化的瀏覽器(免安裝) 基於谷歌無頭 # 谷歌無頭瀏覽器 from selenium import webdriver from time import sleep from selenium.webdriver.chrome.options import Options # 建立一個參數對象,用來控制chrome以無界面模式打開 chrome_options = Options() chrome_options.add_argument('--headless') chrome_options.add_argument('--disable-gpu') bro = webdriver.Chrome(executable_path='./chromedriver.exe',options=chrome_options) bro.get('https://www.baidu.com') sleep(2) bro.save_screenshot('1.png') #拍照截屏 #標籤訂位 tag_input = bro.find_element_by_id('kw') tag_input.send_keys('人民幣') sleep(2) btn = bro.find_element_by_id('su') # 找見 百度一下 按鈕 btn.click() # 點擊進行搜索 sleep(2) print(bro.page_source) # 打印頁面資源 bro.quit() #退出
# 前進後退web
# 模擬瀏覽器 前進 後退 from time import sleep from selenium import webdriver bro=webdriver.Chrome(executable_path='./chromedriver.exe') bro.get('https://www.baidu.com') sleep(1) bro.get('https://www.taobao.com') sleep(1) bro.get('https://sogou.com') sleep(1) browser.back() #後退 sleep(1) browser.forward() #前進
print(bro.page_source) sleep(1) bro.close()
# 動做鏈 拖動 點擊chrome
#動做鏈 from selenium import webdriver from time import sleep from selenium.webdriver import ChromeOptions from selenium.webdriver import ActionChains #動做鏈的類 option = ChromeOptions() option.add_experimental_option('excludeSwitches', ['enable-automation']) bro = webdriver.Chrome(executable_path='./chromedriver.exe',options=option) url = 'https://www.runoob.com/try/try.php?filename=jqueryui-api-droppable' bro.get(url=url) #若是定位的標籤存在於iframe標籤之中,則必須通過switch_to(切換參照物)操做在進行標籤訂位 頁面加載的子頁面 bro.switch_to.frame('iframeResult') # frame的id source_tag = bro.find_element_by_id('draggable') # 開始地 taget_tag = bro.find_element_by_id('droppable') # 目的地 #建立一個動做鏈的對象 action = ActionChains(bro) #實例化動做鏈對象 傳入瀏覽器對象 action.drag_and_drop(source_tag,taget_tag) action.perform() #執行 sleep(3) # bro.quit() # 退出
# 動做鏈 簡單版 from selenium import webdriver from time import sleep from selenium.webdriver import ActionChains bro = webdriver.Chrome(executable_path='./chromedriver.exe') url = 'https://www.runoob.com/try/try.php?filename=jqueryui-api-droppable' bro.get(url=url) #若是定位的標籤存在於iframe標籤之中,則必須通過switch_to操做在進行標籤訂位 bro.switch_to.frame('iframeResult') source_tag = bro.find_element_by_id('draggable') #建立一個動做連的對象 action = ActionChains(bro) action.click_and_hold(source_tag) for i in range(4): #perform表示開始執行動做鏈 action.move_by_offset(20,0).perform() #x,y 水平/垂直像素 sleep(1) bro.quit()
# 如何規避selenium被檢測到?api
正常狀況下咱們用瀏覽器訪問淘寶等網站的 window.navigator.webdriver的值爲 undefined。 而使用selenium訪問則該值爲true. 只須要設置Chromedriver的啓動參數便可解決問題。在啓動Chromedriver以前,爲Chrome開啓實驗性功能參數excludeSwitches,
它的值爲['enable-automation'],完整代碼以下:
from selenium.webdriver import Chrome from selenium.webdriver import ChromeOptions option = ChromeOptions() option.add_experimental_option('excludeSwitches', ['enable-automation']) driver = Chrome(options=option)
# QQ空間的模擬登陸瀏覽器
# 只在沒有驗證碼狀況下適用 QQ空間模擬登錄 from selenium import webdriver from time import sleep bro = webdriver.Chrome(executable_path='./chromedriver.exe') url = 'https://qzone.qq.com' bro.get(url=url) #若是定位的標籤存在於iframe標籤之中,則必須通過switch_to操做在進行標籤訂位 bro.switch_to.frame('login_frame') input_tag = bro.find_element_by_id('switcher_plogin').click() bro.find_element_by_id('u').send_keys('576951284') #這裏填寫你的QQ號 bro.find_element_by_id('p').send_keys('') #這裏填寫你的QQ號 bro.find_element_by_id('login_button').click() sleep(3) print(bro.page_source) bro.save_screenshot('zone.png') # 截屏 拍照 bro.quit()
# QQ空間模擬 from selenium import webdriver from time import sleep bro = webdriver.Chrome(executable_path='./chromedriver.exe') url = 'https://qzone.qq.com' bro.get(url=url) #若是定位的標籤存在於iframe標籤之中,則必須通過switch_to操做在進行標籤訂位 bro.switch_to.frame('login_frame') avartar_tag = bro.find_element_by_id('img_out_576951284').click() sleep(3) print(bro.page_source) bro.save_screenshot('zone.png') bro.quit()