http://www.7799520.com/jiaoyou.html
属于瀑布流网站,只要进度条往下拖数据就一直更新
可以看到是json类型的数据
数据来源:
Request URL:
http://www.7799520.com/api/user/pc/list/search?startage=21&endage=30&gender=2&marry=1&page=2
就是抓包抓到的网址
获取数据:
(1)第一种方法:
import requests
url = 'http://www.7799520.com/api/user/pc/list/search?startage=21&endage=30&gender=2&marry=1&page=2'
response = requests.get(url)
print(response.json())
(2)第二种方法:
import requests
url = 'http://www.7799520.com/api/user/pc/list/search'
params = {
'startage': '21',
'endage': '30',
'gender': '2',
'marry': '1',
'page': '2'
}
response = requests.get(url,params=params)
print(response.json())
观察格式:
首先进入data:
data['data']
然后进入list
data['data']['list']
下面上代码:
import requests
#获取一页数据
def wozhuliangyuanSpider(page):
'''
:param page:页数
:return:响应
'''
params = {
'startage': '21',
'endage': '30',
'gender': '2',
'marry': '1',
'page': page
}
response = requests.get(url,params=params)
#返回响应 json格式 需要提取数据
return response.json()
#提取(解析)数据
def parse(data):
#json数据可以直接用字典解析 提取
#data下list中有20条数据
data = data['data']['list']
for dat in data:
print(dat)
if __name__ == "__main__":
url = 'http://www.7799520.com/api/user/pc/list/search'
json_data = wozhuliangyuanSpider(7) #假设我们需要获取第7页
parse(json_data)
运行结果如下,可以看到一页的20条数据获取成功:
我们还需要保存数据,写一个save函数,改动后代码如下:
import requests
#获取一页数据
def wozhuliangyuanSpider(page):
'''
:param page:页数
:return:响应
'''
params = {
'startage': '21',
'endage': '30',
'gender': '2',
'marry': '1',
'page': page
}
response = requests.get(url,params=params)
#返回响应 json格式 需要提取数据
return response.json()
#提取(解析)数据
def parse(data):
#json数据可以直接用字典解析 提取
#data下list中有20条数据
data = data['data']['list']
for dat in data:
print(dat)
#yield dat
#不要在循环中用return,函数遇到它后会直接结束
#yield是生成器,会一个个返回数据,不会像return一样直接终止函数
#如果不想用yield dat,可以在保存函数写好后直接调用保存函数
#saveData(dat) #不返回数据了,直接保存
saveData(str(dat)) #注意字典要转换为字符串
#保存数据 一般保存为CSV、TXT、JSON、JL、XML格式其中之一
def saveData(data):
# a是追加模式 不会覆盖,w是写的模式 会覆盖
# write只能写入二进制、字符串之类的,不能直接写入列表 元组 字典等
with open('wozhuliangyuan.txt','a',encoding='utf-8') as fp:
fp.write(data+'\n') #一般需要换行
if __name__ == "__main__":
url = 'http://www.7799520.com/api/user/pc/list/search'
json_data = wozhuliangyuanSpider(7) #假设我们需要获取第7页
parse(json_data)
保存的数据如下:打开wozhuliangyuan.txt文件查看
我主良缘生成器(yield)版本:
import requests
#获取一页数据
def wozhuliangyuanSpider(page):
'''
:param page:页数
:return:响应
'''
params = {
'startage': '21',
'endage': '30',
'gender': '2',
'marry': '1',
'page': page
}
response = requests.get(url,params=params)
#返回响应 json格式 需要提取数据
return response.json()
#提取(解析)数据
def parse(data):
#json数据可以直接用字典解析 提取
#data下list中有20条数据
data = data['data']['list']
for dat in data:
#print(dat)
yield dat
#保存数据 一般保存为CSV、TXT、JSON、JL、XML格式其中之一
def saveData(data):
# a是追加模式 不会覆盖,w是写的模式 会覆盖
# write只能写入二进制、字符串之类的,不能直接写入列表 元组 字典等
with open('wozhuliangyuan.txt','a',encoding='utf-8') as fp:
fp.write(data+'\n') #一般需要换行
if __name__ == "__main__":
url = 'http://www.7799520.com/api/user/pc/list/search'
json_data = wozhuliangyuanSpider(7) #假设我们需要获取第7页
#解析后的数据 是生成器 需要循环遍历才可以
parseData = parse(json_data)
for dd in parseData:
#print(dd)
#dd是需要保存的数据
saveData(str(dd))
另附:关于生成器的高效