我主良缘网站数据采集

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))

另附:关于生成器的高效

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值