我们在进行爬虫开发的时候,fildder是一个必不可少的神器。尤其是现在大型网站的反爬越来越难处理,经常会花费我们大量的时间来找到哪些参数是必须的。因此如果能够快速的将fildder抓到的包里面的参数转换成python可用的格式,那么无疑可以极大的提高我们的开发效率。
因此我写了小工具,主要目的是为了快速的将fildder里抓到的header
,data
,cookie
转换成requests
,scrapy
等支持的dict
格式。
注意: 仅支持解析从
WebForm
里复制参数
将data
的参数从WebForm
里复制出来的格式是这样的:
_token
address
channel 6
cityId
gpsLat 23.135075
gpsLng 113.357076
shopId 0
source shoplist
第一列为
key
值,第二列为value
值。 后面为空的表示value
的值便为空。
由于它的规则还是十分整齐的,所以可以使用正则来将其分别提取出来:
import re
def re_data(data):
key_rule='(.*)\t'
key = re.findall(key_rule,data)
value_rule = '\t(.*)'
value = re.findall(value_rule,data)
print(len(key))
print(len(value))
result = {}
if len(key) == len(value):
for i in range(len(key)):
result[key[i]] = value[i]
print(result)
上面的那段data参数使用此函数的运行结果为:
{'_token': '', 'address': '', 'channel': '6', 'cityId': '', 'gpsLat': '23.135075', 'gpsLng': '113.357076', 'shopId': '0', 'source': 'shoplist'}
该结果会在控制台输出,由于结果是一个标准的dict
,所以我们可以直接的将其复制到python代码使用就好。
无论参数有多少,整个过程只需要十秒钟。相比之前一个参数一个参数的复制粘贴来讲,效率提高了数倍。
同样的道理,对于header
,cookie
的值,我们也可以使用正则的方法来解析:
解析 header
def re_header(header):
key = re.findall('[\t|\n]([\w*|\.|-]*):',header)
val = re.findall(':[\n\t]*(.*)\n',h1)
header = {}
print(key)
print(val)
for i in range(0,len(key)):
header[key[i]] = val[i].lstrip(' ')
print(key[i],val[i])
print(len(key))
print(len(val))
print(header)
解析 cookie
def re_cookie(cookieStr):
print(cookieStr.encode('utf-8'))
key = re.findall('[\t|\n]([\w*|\.]*)=',cookieStr)
val = re.findall('=[\n\t]*(.*)\n',cookieStr)
cookies = {}
for i in range(0, len(key)):
cookies[key[i]] = val[i]
print(key[i], val[i])
print(key)
print(len(key))
print(len(val))
print(cookies)
使用方法同解析data
一样,这里不做多余的演示。
注意:
header值 仅支持解析从Raw
里复制出来的值
data值 仅支持解析从WebForms
里复制出来的值
cookie值 仅支持解析从Cookies
里复制出来的值
三个函数的源码已经更新至我的gayhub了,该项目日后可能还会再更新一些爬虫中常用的代码片段,比如获取经纬度的方法等等。
也可能不会