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是这样的。