1. 程式人生 > >140 亂碼處理 驗證碼, session

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被封鎖。