A. 如何用python爬蟲模擬點擊後,獲取發送出的http請求
我的第一想法是找到點擊事件之後訪問的url
然後分析參數,自己構建請求,獲取返回值,從返回值中分析出需要的url
B. python如何才能獲取src地址
Copyright © 1999-2020, CSDN.NET, All Rights Reserved
python
打開APP
pergoods
關注
Python多線程爬取網站image的src屬性實例 原創
2017-05-16 11:18:51
pergoods
碼齡6年
關注
# coding=utf-8
'''
Created on 2017年5月16日
@author: chenkai
Python多線程爬取某單無聊圖圖片地址(requests+BeautifulSoup+threading+Queue模塊)
'''
import requests
from bs4 import BeautifulSoup
import threading
import Queue
import time
class Spider_Test(threading.Thread):
def __init__(self,queue):
threading.Thread.__init__(self)
self.__queue = queue
def run(self):
while not self.__queue.empty():
page_url=self.__queue.get() [color=red]#從隊列中取出url[/color]
print page_url
self.spider(page_url)
def spider(self,url):
r=requests.get(url) [color=red]#請求url[/color]
soup=BeautifulSoup(r.content,'lxml') [color=red]#r.content就是響應內容,轉換為lxml的bs對象[/color]
imgs = soup.find_all(name='img',attrs={}) #查找所有的img標簽,並獲取標簽屬性值(為列表類型)
for img in imgs:
if 'onload' in str(img): [color=red]#img屬性集合中包含onload屬性的為動態圖.gif,[/color]
print 'http:'+img['org_src']
else:
print 'http:'+img['src']
def main():
queue=Queue.Queue()
url_start = 'http://jandan.net/pic/page-'
for i in range(293,295):
url = url_start+str(i)+'#comment'
queue.put(url) [color=red]#將循環拼接的url放入隊列中[/color]
threads=[]
thread_count=2 [color=red]#默認線程數(可自動修改)[/color]
for i in range(thread_count):
threads.append(Spider_Test(queue))
for i in threads:
i.start()
for i in threads:
i.join()
if __name__ == '__main__':[color=red] #在.py文件中使用這個條件語句,可以使這個條件語句塊中的命令只在它獨立運行時才執行[/color]
time_start = time.time()
main() [color=red]#調用main方法[/color]
print time.time()-time_start
[color=red]#背景知識[/color]
'''
q = Queue.Queue(maxsize = 10)
Queue.Queue類即是一個隊列的同步實現。隊列長度可為無限或者有限。可通過Queue的構造函數的可選參數maxsize來設定隊列長度。如果maxsize小於1就表示隊列長度無限。
將一個值放入隊列中
q.put(10)
調用隊列對象的put()方法在隊尾插入一個項目。put()有兩個參數,第一個item為必需的,為插入項目的值;第二個block為可選參數,默認為
1。如果隊列當前為空且block為1,put()方法就使調用線程暫停,直到空出一個數據單元。如果block為0,put方法將引發Full異常。
將一個值從隊列中取出
q.get()
調用隊列對象的get()方法從隊頭刪除並返回一個項目。可選參數為block,默認為True。如果隊列為空且block為True,get()就使調用線程暫停,直至有項目可用。如果隊列為空且block為False,隊列將引發Empty異常。
'''
[color=red]如果想要下載圖片需要
import urllib
再替換spider方法即可[/color]
def spider(self,url):
r=requests.get(url)
soup=BeautifulSoup(r.content,'lxml')
imgs = soup.find_all(name='img',attrs={})
urls=[]
for img in imgs:
if 'onload' in str(img):
print 'http:'+img['org_src']
urls.append('http:'+img['org_src'])
else:
print 'http:'+img['src']
url = urls.append('http:'+img['src'])
#下載圖片
k=0
for urlitem in urls:
k+=1
if '.jpg' in urlitem:
urllib.urlretrieve(url=urlitem,filename='F:\image\\'+str(k)+'.jpg')
[color=red]-----------多線程訪問網路實例[/color]
#coding:utf-8
import requests
import threading
import time
import sys
url = 'https://www..com'
def get_():
global url
time_start = time.time()
r = requests.get(url=url)
times = time.time()-time_start
sys.stdout.write('status:%s time:%s current_time:%s\n'%(r.status_code,times,time.strftime('%H:%M:%S')))
def main():
threads = []
thread_count = 10
for i in range(thread_count):
t = threading.Thread(target=get_,args=())
threads.append(t)
for i in range(thread_count):
threads[i].start()
for i in range(thread_count):
threads[i].join()
if __name__=='__main__':
C. 怎麼用python獲取js生成的get請求地址
仔細分析一下這個地址還螞譽是銷此比較固定的,saller_id 應該是賣家id, 這個可以在含有saller_id的頁面先抓取出來,
size 是每頁的顯示的數量,page是頁悶斗段號,ajson=1是固定的,
總之可以自己構造這樣一個地址,而不用通過抓取。
D. Python Http 請求
如果要進行客戶端和伺服器端之間的消息傳遞,我們可以使用HTTP協議請求
通過URL網址傳遞信息,可以直接在URL中寫上要傳遞的信息,也可以由表單進行傳遞(表單中的信息會自動轉化為URL地址中的數據,通過URL地址傳遞)
備註:已經取得資源,並將資源添加到響應中的消息體
可以向伺服器提交數據,是一種比較安全的數據傳遞方式,比如在登錄時,經常使用 POST 請求發送數據
請求伺服器存儲一個資源,通常需要制定存儲的位置
請求伺服器刪除一個資源
請求獲取對應的 HTTP 報頭信息
可以獲得當前URL所支持的請求類型
狀態碼:200 OK
表明請求已經成功. 默認情況下成功的請求將會被緩存
不同請求方式對於請求成功的意義如下:
GET:已經取得資源,並將資源添加到響應中的消息體.
HEAD:作為消息體的頭部信息
POST:在消息體中描述此次請求的結果
請求成功對於PUT 和 DELETE 來說並不是200 ok 而是 204 所代表的沒有資源 (或者 201 所代表的當一個資源首次被創建成功
以下是常見狀態碼及含義
E. 【Python爬蟲】分析網頁真實請求
1、抓取網頁、分析請求
2、解析網頁、尋找數據
3、儲存數據、多頁處理
翻頁有規律:
很多網址在第一頁時並沒有變化,多翻下一頁後規律就出來,比如 豆瓣第一頁 和 豆瓣第三頁
發現start為40,limit=20,所以猜測start=0就是第一頁,每頁顯示20條數據,對於第三頁顯示的參數可以一個個刪除驗證,可以減去不必要的參數, 但是刪除前一定要做好數據的對比
(1) 文本框輸入後產生一個請求,如常見的登錄、注冊頁面
Referer:表示當前請求的來源
Request URL:表示實際請求地址
翻頁後URL不變,該如何尋找請求?
如: http://www.zkh360.com/zkh_catalog/3.html
通過對比可以發現網站是通過pageIndex參數控制翻頁的,?表示連接
接下來用抓包工具分析下 ,從第四頁開始看URL就知道了,但是前面幾面需要查看請求的參數,這里偏多,就切換到【Inspectors--Webforms】選項,看的比較直觀
類似的網站還有 今日頭條 ,有興趣的朋友可以去研究下
(可通過獲取max_behot_time的值而改變as和cp)
F. 用python,selenium,打開網頁或者點擊按鈕會向伺服器發送很多請求,用python如何獲
你可以在chrome上加一個代理,比如tiny proxy,它是純python寫的態戚滑。你改一改帆臘就可以奕成抓包程序, 自然就可以獲得返回的請求。
另外在selenium里,也應該可以獲得響應結果。它通過chrome驅動,我沒有仔細看過代碼,webkit內核是直接通過toHtml,或者是類似的命令可以獲得響應結果的。 selenium應該也可以。
猜可以通過javascript驅動selenium,獲得響仔物應結果。
G. python 能獲取網頁的網路請求嗎
(一)通過GET和POST方式獲取頁面內容
網路爬蟲,即Web Spider,是一個很形象的名字。
把互聯網比喻成一個蜘蛛網,那麼Spider就是在網上爬來爬去的蜘蛛。
HTTP協議中定義了四個與伺服器進行交互的方法,分別是GET, POST,PUT,DELETE ,實際對應對伺服器內容的「增」刪「改」查「四個操作
本篇文章主要記錄我學習GET和POST請求方式的過程
首先,如何區分GET 和POST請求?
我們可以簡單地通過瀏覽器地址欄是否改變來加以區分。舉例說明,在網路上搜索CSDN時,頁面會跳轉到搜索結果頁,同時瀏覽器上方的URL也會發生改變。
如上圖所示,變化就在於,在最初的url後面會附加相關的欄位,以?分割url和請求的數據,這些數據就是你要查詢欄位的編碼。。而這個過程,就是典型的GET請求的情況。
POST請求則顯得」深藏不露「。它在於你必須通過瀏覽器輸入或提交一些伺服器需要的數據,才能給你返回完整的界面,這點其實與GET請求情況有相通之處,但是這個過程瀏覽器的地址欄是不會發生跳轉的。
那POST請求提交的數據是如何傳給伺服器的呢?可以採用一些分析頁面的手段來獲取上傳的數據。實際上,POST請求是將提交的數據放在HTTP包的包體中,這種方式無疑加強了數據的安全性,不像GET請求那樣,用戶可以通過跳轉的url就可以查看出向伺服器發送的數據。另外,POST請求除了提交數據外,還可以提交文件,這點也是GET請求做不到的。
總的來說,在做數據查詢時,建議用GET方式;而在做數據添加、修改或刪除時,建議用POST方式。
下面用具體代碼展示GET與POST方式的差異
#coding =utf-8import urllib2
url="httcom"req=urllib2.Request(url)#req表示向伺服器發送請求#response=urllib2.urlopen(req)#response表示通過調用urlopen並傳入req返回響應response#the_page=response.read()#用read解析獲得的HTML文件#print the_page#在屏幕上顯示出來#1234567
這是一個最簡單的爬蟲程序,功能類似於打開網路主頁。如果你此時用瀏覽器打開網路並查看其源代碼,會發現屏幕上的內容和瀏覽器中完全一樣,也就是說,上面這四行代碼將我們訪問網路時瀏覽器收到的代碼們全部列印了出來。
這就是一個最簡單的GET的例子。
再來看一個POST方式的例子
#code=utf-8import urllib2
import urllib
url='http'//把要發送的數據寫成字典value={ 'name':'BUPT', 'age':'60', 'location':'Beijing'#字典中的內容隨意,不影響#}
data=urllib.urlencode(value)#對value進行編碼,轉換為標准編碼#req=urllib2.Request(url,data)#向url發送請求,並傳送表單data#response=urllib2.urlopen(req)#獲取響應#the_page=response.read()#解析#print the_page#顯示#123456789101112131415
程序運行之後,你可以試試將獲取的網頁源代碼用瀏覽器打開,會發現得到的頁面是這樣的
因為我們向網站提供的數據是隨便寫的,並不存在,所以就會得到這樣的結果。
H. python web.py中怎麼獲取請求IP (客戶端IP)
你試試:request.META['REMOTE_ADDR']
I. python使用Flask框架獲取用戶IP地址的方法
主要介紹了python使用Flask框架獲取用戶IP地址的方法,實例分析了Python使用Flask框架remote_addr獲取IP的`技巧,非常具有實用價值,需要的朋友可以參考下。
下面的代碼包含了html頁面和python代碼,非常詳細,如果你正使用Flask,也可以學習一下最基本的Flask使用方法。
python代碼如下:
?
1
2
3
4
5
6
7
8
9
10
11
12
13
from flask import Flask, render_template, request
# Initialize the Flask application
app = Flask(__name__)
# Default route, print user's IP
@app.route('/')
def index():
ip = request.remote_addr
return render_template('index.html', user_ip=ip)
if __name__ == '__main__':
app.run(
host="0.0.0.0",
port=int("80")
)
html代碼如下:
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
<!DOCTYPE html>
<html lang="en">
<head>
<link href="bootstrap/3.0.0/css/bootstrap.min.css"
rel="stylesheet">
</head>
<body>
<p class="container">
<p class="header">
<h3 class="text-muted">How To Get The IP Address Of The User</h3>
</p>
<hr/>
<p>
You IP address is: <strong>{{user_ip}}</strong>
<p class="header">
<h3 class="text-muted">Code to retrieve the IP</h3>
</p>
<hr/>
<pre>
from flask import Flask, render_template, request
# Initialize the Flask application
app = Flask(__name__)
# Default route, print user's IP
@app.route('/')
def index():
ip = request.remote_addr
return render_template('index.html', user_ip=ip)
</pre>
</p>
</p>
</body>
</html>
希望本文所述對大家的Python程序設計有所幫助。
J. 如何用python獲得跨域請求的json數據
首先找到獲取所需信息的請求,之後查看請求地址和請求參數,使用同樣的請求發送數據,如果能得到就OK,得不到的話,可以看一下瀏覽器的請求代碼,火狐和Chrome都可以查看,然後把這些請求頭加到代碼中,就可以查到了
如果得到的是亂碼,有可能被壓縮了,解壓一下就好,一般為gzip類型壓縮,請求頭Accept-Encoding:gzip是這樣的。