140 亂碼處理 驗證碼, session
1 亂碼處理:
import requests from lxml import etree headers = { 'User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36' } url = 'http://pic.netbian.com/4kmeinv/' response = requests.get(url=url,headers=headers) # response.encoding = 'utf-8'#檢查請求到的原始碼資料的編碼格式 print(response.encoding) 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/img/@alt')[0] # img_name = img_name.encode('gbk').decode('utf-8') img_name = img_name.encode('ISO-8859-1').decode('gbk')print(img_src,img_name)
2 驗證碼 問題
# https://blog.csdn.net/hfutzhouyonghang/article/details/81009760 import requests from urllib import request from lxml import etree url = "https://so.gushiwen.org/user/login.aspx?from=http://so.gushiwen.org/user/collect.aspx" headers = { "User-Agent":'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36', "Connection":"close" } session = requests.Session() #session物件和requests作用幾乎一樣,都可以進行請求的傳送,並且請求傳送的方式也是一致的, #session進行請求的傳送,如果會產生cookie的話,則cookie會自動被儲存到session物件中 page_text = session.get(url=url, headers=headers).text tree = etree.HTML(page_text) img_src = "https://so.gushiwen.org" + tree.xpath('//*[@id="imgCode"]/@src')[0] page_text = session.get(url=img_src, headers=headers).content with open("./gushiwen.jpg", "wb") as f: f.write(page_text) img_code = get_code(1004, "./gushiwen.jpg") print(img_code) __VIEWSTATE = tree.xpath('//input[@id="__VIEWSTATE"]/@value')[0] __VIEWSTATEGENERATOR = tree.xpath('//input[@id="__VIEWSTATEGENERATOR"]/@value')[0] login_url = "https://so.gushiwen.org/user/login.aspx?from=http%3a%2f%2fso.gushiwen.org%2fuser%2fcollect.aspx" data = { "__VIEWSTATE":__VIEWSTATE, "__VIEWSTATEGENERATOR":__VIEWSTATEGENERATOR, "from":"http://so.gushiwen.org/user/collect.aspx", "email":"[email protected]", "pwd":"gyh412724", "code":img_code, "denglu":"登入", } # 模擬登陸 # 使用Session物件提交請求,相當於在瀏覽器中連續操作網頁,而如果直接使用```request.post()```,則相當沒提交一次請求,則開啟一個瀏覽器,我們在實際使用瀏覽器的經驗告訴我們,這樣是不行的。 login_content = session.post(url=login_url, data=data, headers=headers).content with open('./gushiwen.html', "wb") as f: f.write(login_content)
3 雲打碼 : 'http://api.yundama.com/api.php'
使用流程:
註冊:普通使用者和開發者使用者 登入: 普通使用者:查詢餘額 開發者使用者: 建立一個軟體:我的軟體->新增一個新軟體 下載示例程式碼:開發文件->下載最新呼叫DLL->HTTPPython示例程式碼
4 代理: proxies: https://jingyan.baidu.com/article/4f7d5712101fdd1a2119276c.html
url = 'https://www.baidu.com/s?wd=ip' page_text = requests.get(url=url,headers=headers,proxies={'https':'103.110.184.149:55133'}).text with open('./ip.html','w',encoding='utf-8') as fp: fp.write(page_text)
a : 代理的基本原理:
代理實際上指的就是代理伺服器,英文叫作proxy server,它的功能是代理網路使用者去取得網路資訊。形象地說,它是網路資訊的中轉站。在我們正常請求一個網站時,是傳送了請求給Web伺服器,Web伺服器把響應傳回給我們。如果設定了代理伺服器,實際上就是在本機和伺服器之間搭建了一個橋,此時本機不是直接向Web伺服器發起請求,而是向代理伺服器發出請求,請求會發送給代理伺服器,然後由代理伺服器再發送給Web伺服器,接著由代理伺服器再把Web伺服器返回的響應轉發給本機。這樣我們同樣可以正常訪問網頁,但這個過程中Web伺服器識別出的真實IP就不再是我們本機的IP了,就成功實現了IP偽裝,這就是代理的基本原理。
b : 代理的作用:
1) 突破自身IP訪問限制,訪問一些平時不能訪問的站點。
2) 訪問一些單位或團體內部資源:比如使用教育網內地址段免費代理伺服器,就可以用於對教育網開放的各類FTP下載上傳,以及各類資料查詢共享等服務。
3) 提高訪問速度:通常代理伺服器都設定一個較大的硬碟緩衝區,當有外界的資訊通過時,同時也將其儲存到緩衝區中,當其他使用者再訪問相同的資訊時,則直接由緩衝區中取出資訊,傳給使用者,以提高訪問速度。
4) 隱藏真實IP:上網者也可以通過這種方法隱藏自己的IP,免受攻擊。對於爬蟲來說,我們用代理就是為了隱藏自身IP,防止自身的IP被封鎖。