鱼C论坛

 找回密码
 立即注册
查看: 2326|回复: 16

Requests爬虫问题

[复制链接]
发表于 2020-5-30 11:54:15 | 显示全部楼层 |阅读模式
60鱼币
大佬们,我现在要用Requests包去爬一个网址,这个网址需要登录密码之后才可以爬取。我现在已经完成了登录操作,但是我发现在爬取出来的数据是有问题的,我最需要的数据无法爬取出来,如下图所示:
Screen Shot 2020-05-29 at 4.23.10 PM.png

这是我的代码:
Screen Shot 2020-05-29 at 8.52.45 PM.png

想问一下大佬们该如何解决?

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-5-30 19:37:19 | 显示全部楼层
你这不是提取出来了吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-5-30 22:34:40 | 显示全部楼层
但是我发现在爬取出来的数据是有问题的,我最需要的数据无法爬取出来,如下图所示:


需要的数据请求不到?还是什么问题?最后打印的响应请求文本没有需要的数据??
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-5-30 23:18:20 | 显示全部楼层
我最需要的数据无法爬取出来,如下图所示:

红框里不就是你最需要的数据吗,不然你标红框干嘛?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-5-31 00:25:52 | 显示全部楼层
suchocolate 发表于 2020-5-30 23:18
红框里不就是你最需要的数据吗,不然你标红框干嘛?

不是的,红框里显示告诉我,因为我的浏览器无法显示json数据,这是一段提示话。我真正需要的数据没有给我显示出来
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-5-31 09:34:38 | 显示全部楼层
我猜是这样:用session登录,然后用session去请求真是的数据网址
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-5-31 09:40:37 | 显示全部楼层
shenshuai 发表于 2020-5-31 00:25
不是的,红框里显示告诉我,因为我的浏览器无法显示json数据,这是一段提示话。我真正需要的数据没有给我 ...

headers调用试试
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-5-31 12:07:55 | 显示全部楼层
1、登录后把请求头“Referer”带上
2、好好分析你要的数据的响应体是访问的哪个url
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-5-31 12:43:05 | 显示全部楼层
是.js文件还没有渲染出来,用selenium模块配合chromed driver加上谷歌浏览器就可以获取到渲染后的页面, 用switch_frame函数切换到你想要爬取的框架,就可以read到你想要获得的数据。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-5-31 12:45:40 | 显示全部楼层
  1. # 此脚本需要配合谷歌浏览器与谷歌驱动
  2. # 作者:那宏岩


  3. import urllib.request
  4. import re
  5. from selenium import webdriver
  6. from selenium.webdriver.chrome.options import Options
  7. def search(music=None,singer=None):
  8.     if not music and not singer:
  9.         raise ImportError('参数错误!!')
  10.    
  11.     if not music:
  12.         name = singer
  13.     else:
  14.         name = music
  15.    
  16.     chrome_opt = Options()      # 创建参数设置对象.
  17.     chrome_opt.add_argument('--headless')   # 无界面化.
  18. #    chrome_opt.add_argument('--disable-gpu')    # 配合上面的无界面化.

  19.     driver = webdriver.Chrome(chrome_options = chrome_opt,executable_path=r'C:\CLOUD Artification Intelligence\extanded_function\chromedriver.exe')
  20.     driver.get('https://music.163.com/#/search/m/?s=' + name)
  21.     driver.switch_to.frame('g_iframe')
  22.     music_list = re.findall(r'<a href="/song\?id=(\d*)"><b title="(.*?)">',driver.page_source)
  23.     singer_list = re.findall(r'<a href="/artist\?id=\d*">(.*?)</a>',driver.page_source)
  24.     driver.quit()
  25.     music_num = len(music_list)
  26.     download_list = list()
  27.     if singer:
  28.         for i in range(music_num):
  29.             if singer in singer_list[i]:
  30.                 download_list.append(music_list[i]+(singer_list[i],))
  31.     else:
  32.         for i in range(music_num):
  33.             download_list.append(music_list[i]+(singer_list[i],))
  34.             
  35.     print(download_list)
  36.         
  37.     down_load_sign = input(r'开始下载吗?[Y\N]:')
  38.     if down_load_sign == 'Y':
  39.         for each_music in download_list:
  40.             print(f'{each_music[1]}-{each_music[2]}.mp3正在下载!')
  41.             urllib.request.urlretrieve(f'http://music.163.com/song/media/outer/url?id={each_music[0]}.mp3',f'C:\\CLOUD Artification Intelligence\\clouddata\\Sound\\{each_music[1]}-{each_music[2]}.mp3')
  42.             print(f'{each_music[1]}-{each_music[2]}.mp3下载完成!')
  43.         
  44.             

  45. if __name__ == '__main__':
  46.     while True:
  47.         music_name = input('请输入歌曲名:')
  48.         singer_name = input('请输入歌手名:')
  49.         search(music_name,singer_name)

复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-5-31 12:47:46 | 显示全部楼层
你可以看看我这个代码,本来是一个爬取网易云音乐的代码,里面包含了selenium的用法。改一改就可以在你的程序里使用了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-5-31 12:49:05 | 显示全部楼层
  1. # 此脚本需要配合谷歌浏览器与谷歌驱动
  2. # 作者:那宏岩


  3. import urllib.request
  4. import re
  5. from selenium import webdriver
  6. from selenium.webdriver.chrome.options import Options
  7. def search(music=None,singer=None):
  8.     if not music and not singer:
  9.         raise ImportError('参数错误!!')
  10.    
  11.     if not music:
  12.         name = singer
  13.     else:
  14.         name = music
  15.    
  16.     chrome_opt = Options()      # 创建参数设置对象.
  17.     chrome_opt.add_argument('--headless')   # 无界面化.
  18. #    chrome_opt.add_argument('--disable-gpu')    # 配合上面的无界面化.

  19.     driver = webdriver.Chrome(chrome_options = chrome_opt,executable_path=r'C:\CLOUD Artification Intelligence\extanded_function\chromedriver.exe')
  20.     driver.get('https://music.163.com/#/search/m/?s=' + name)
  21.     driver.switch_to.frame('g_iframe')
  22.     music_list = re.findall(r'<a href="/song\?id=(\d*)"><b title="(.*?)">',driver.page_source)
  23.     singer_list = re.findall(r'<a href="/artist\?id=\d*">(.*?)</a>',driver.page_source)
  24.     driver.quit()
  25.     music_num = len(music_list)
  26.     download_list = list()
  27.     if singer:
  28.         for i in range(music_num):
  29.             if singer in singer_list[i]:
  30.                 download_list.append(music_list[i]+(singer_list[i],))
  31.     else:
  32.         for i in range(music_num):
  33.             download_list.append(music_list[i]+(singer_list[i],))
  34.             
  35.     print(download_list)
  36.         
  37.     down_load_sign = input(r'开始下载吗?[Y\N]:')
  38.     if down_load_sign == 'Y':
  39.         for each_music in download_list:
  40.             print(f'{each_music[1]}-{each_music[2]}.mp3正在下载!')
  41.             urllib.request.urlretrieve(f'http://music.163.com/song/media/outer/url?id={each_music[0]}.mp3',f'C:\\CLOUD Artification Intelligence\\clouddata\\Sound\\{each_music[1]}-{each_music[2]}.mp3')
  42.             print(f'{each_music[1]}-{each_music[2]}.mp3下载完成!')
  43.         
  44.             

  45. if __name__ == '__main__':
  46.     while True:
  47.         music_name = input('请输入歌曲名:')
  48.         singer_name = input('请输入歌手名:')
  49.         search(music_name,singer_name)

复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-6-1 01:55:10 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-6-1 16:27:30 | 显示全部楼层
用selenium不香吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-6-1 16:55:15 | 显示全部楼层
xiaosi4081 发表于 2020-6-1 16:27
用selenium不香吗?

不方便,我有上千个网页要爬,每个都要跟手动模式一样打开网页再点半天,肯定是不行的。要不然就是什么无头浏览器,那个写起来过于麻烦
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-6-1 18:15:31 | 显示全部楼层
hearers 加下cookie 看看,或者私信QQ,帮你瞅瞅
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-7-24 14:24:58 | 显示全部楼层
shenshuai 发表于 2020-6-1 16:55
不方便,我有上千个网页要爬,每个都要跟手动模式一样打开网页再点半天,肯定是不行的。要不然就是什么无 ...

这可是个大数据啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-26 18:24

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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