鱼C论坛

 找回密码
 立即注册
查看: 2287|回复: 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,再通过搜索接口获取到结果。
  1. import requests
  2. import re

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


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


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

  25.     form_data = {
  26.         'keyword': keyword,
  27.         'filter': 'true'
  28.     }
  29.     response = requests.post(url[1], headers=headers, data=form_data).json()
  30.     data = response['result']['list'][0]['product'][0]
  31.     name = data['name']
  32.     ed2k = data['url']
  33.     print('文件名:', name)
  34.     print(ed2k)


  35. if __name__ == '__main__':
  36.     word = input('输入正确的关键词:')
  37.     token, cookie = get_index()
  38.     get_search(token, cookie, word)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

  1. import requests


  2. def main():
  3.     url = 'https://msdn.itellyou.cn/Index/Search'
  4.     headers = {'host': 'msdn.itellyou.cn',
  5.                'user-agent': 'mozilla',
  6.                'x-requested-with': 'XMLHttpRequest',
  7.                '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',
  8.                'x-csrf-token': 'CfDJ8Jw19B-OaM1KveQHPjyyKONjKrajxjskyf-i-AYUela7tX0R6jfXuGhFUWXu0Ddf1x4jxrcRj1b5Lw9pbFUoikM8NesPhSlHr60O8YzEO5tysfLDWZ-WgBbTAuab6Hb3gEU5boFJgRmEJurpu5hc_2A'}
  9.     data = {'keyword': 'ASP.NET', 'filter': 'true'}
  10.     r = requests.post(url, headers=headers, data=data)
  11.     result = r.json()['result']['list'][0]['product'][0]['url']
  12.     print(result)


  13. if __name__ == '__main__':
  14.     main()
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

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


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


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

  25.     form_data = {
  26.         'keyword': keyword,
  27.         'filter': 'true'
  28.     }
  29.     response = requests.post(url[1], headers=headers, data=form_data).json()
  30.     data = response['result']['list'][0]['product'][0]
  31.     name = data['name']
  32.     ed2k = data['url']
  33.     print('文件名:', name)
  34.     print(ed2k)


  35. if __name__ == '__main__':
  36.     word = input('输入正确的关键词:')
  37.     token, cookie = get_index()
  38.     get_search(token, cookie, word)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-29 04:05

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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