鱼C论坛

 找回密码
 立即注册
查看: 1993|回复: 2

[已解决]MSDN I TELL YOU 爬虫求助

[复制链接]
发表于 2020-11-1 20:32:04 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x


[求助]用爬虫通过以下方式获取资源:


打开https://msdn.itellyou.cn/,在搜索框输入ASP.NET,下载搜索到的资源


                               
登录/注册后可看大图
最佳答案
2020-11-5 16:00:16
首先在首页获取到token和cookie,再通过搜索接口获取到结果。
import requests
import re

url = ['https://msdn.itellyou.cn/', 'https://msdn.itellyou.cn/Index/Search']


def get_index():
    # 获取token
    headers = {
        'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 '
                      '(KHTML, like Gecko) Chrome/86.0.4240.111 Safari/537.36'
    }
    response = requests.get(url[0], headers=headers)
    if response.status_code == 200:
        token = re.findall('data-token=(.*?)>', response.content.decode())[0]
        cookie = response.headers.get('set-cookie')
        return token, cookie
    else:
        return None


def get_search(token, cookie, keyword):
    # 获取结果
    headers = {
        'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 '
                      '(KHTML, like Gecko) Chrome/86.0.4240.111 Safari/537.36',
        'x-csrf-token': token,
        'cookie': cookie
    }

    form_data = {
        'keyword': keyword,
        'filter': 'true'
    }
    response = requests.post(url[1], headers=headers, data=form_data).json()
    data = response['result']['list'][0]['product'][0]
    name = data['name']
    ed2k = data['url']
    print('文件名:', name)
    print(ed2k)


if __name__ == '__main__':
    word = input('输入正确的关键词:')
    token, cookie = get_index()
    get_search(token, cookie, word)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-11-2 09:46:58 | 显示全部楼层
有个x-csrf-token可能是js和server发的参数生成的,暂不知道生成方法。
省事直接用浏览器生成的用,可以取到数据。
import requests


def main():
    url = 'https://msdn.itellyou.cn/Index/Search'
    headers = {'host': 'msdn.itellyou.cn',
               'user-agent': 'mozilla',
               'x-requested-with': 'XMLHttpRequest',
               'cookie': '.AspNetCore.Antiforgery.kC_Kc8he0KM=CfDJ8Jw19B-OaM1KveQHPjyyKOMADAmMg2q5toW_LJWlqEXnU0jD9YC6wUstfDumTKhBH0rNObkFecQLizZmVdRAQjmo8v15j9AC_r7dMC4mLpbYgE4iY87M2pp2cmbzF0fxx84lnQLnTwFpHepRbzYobPA; UM_distinctid=175868b07b9a1-0004b0cc9965b78-116b634a-144000-175868b07ba123; CNZZDATA1605814=cnzz_eid%3D1160383727-1604275704-https%253A%252F%252Ffishc.com.cn%252F%26ntime%3D1604275704; _ga=GA1.2.1891466530.1604280060; _gid=GA1.2.888516437.1604280060; Hm_lvt_8688ca4bc18cbc647c9c68fdaef6bc24=1604280060,1604280659; Hm_lpvt_8688ca4bc18cbc647c9c68fdaef6bc24=1604280659; _gat=1',
               'x-csrf-token': 'CfDJ8Jw19B-OaM1KveQHPjyyKONjKrajxjskyf-i-AYUela7tX0R6jfXuGhFUWXu0Ddf1x4jxrcRj1b5Lw9pbFUoikM8NesPhSlHr60O8YzEO5tysfLDWZ-WgBbTAuab6Hb3gEU5boFJgRmEJurpu5hc_2A'}
    data = {'keyword': 'ASP.NET', 'filter': 'true'}
    r = requests.post(url, headers=headers, data=data)
    result = r.json()['result']['list'][0]['product'][0]['url']
    print(result)


if __name__ == '__main__':
    main()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-11-5 16:00:16 | 显示全部楼层    本楼为最佳答案   
首先在首页获取到token和cookie,再通过搜索接口获取到结果。
import requests
import re

url = ['https://msdn.itellyou.cn/', 'https://msdn.itellyou.cn/Index/Search']


def get_index():
    # 获取token
    headers = {
        'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 '
                      '(KHTML, like Gecko) Chrome/86.0.4240.111 Safari/537.36'
    }
    response = requests.get(url[0], headers=headers)
    if response.status_code == 200:
        token = re.findall('data-token=(.*?)>', response.content.decode())[0]
        cookie = response.headers.get('set-cookie')
        return token, cookie
    else:
        return None


def get_search(token, cookie, keyword):
    # 获取结果
    headers = {
        'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 '
                      '(KHTML, like Gecko) Chrome/86.0.4240.111 Safari/537.36',
        'x-csrf-token': token,
        'cookie': cookie
    }

    form_data = {
        'keyword': keyword,
        'filter': 'true'
    }
    response = requests.post(url[1], headers=headers, data=form_data).json()
    data = response['result']['list'][0]['product'][0]
    name = data['name']
    ed2k = data['url']
    print('文件名:', name)
    print(ed2k)


if __name__ == '__main__':
    word = input('输入正确的关键词:')
    token, cookie = get_index()
    get_search(token, cookie, word)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-18 00:31

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表