鱼C论坛

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

[已解决]爬虫遇到<noscript>标签怎么解决

[复制链接]
发表于 2021-2-4 16:30:48 | 显示全部楼层 |阅读模式
30鱼币
<noscript>标签是在浏览器(或者用户浏览标识),没有启动脚本支持的情况下触发的标签,在低级爬虫中,基本都没有配置js引擎,通常这种方式和Ajax异步加载同时使用。用于保护自己不想让爬虫接触的信息。

我想爬的网址是https://www.mgtv.com/b/350683/11 ... 3&lastp=ch_home

目的是提取出评论,但是被这个noscript标签阻挡了,哪位大神能告诉我怎么去爬
这个反爬真让人头疼
  1. import sys
  2. sys.path.append('/home/aistudio/external-libraries')
  3. import re
  4. import requests
  5. from bs4 import BeautifulSoup

  6. def get_div():
  7.     url = "https://www.mgtv.com/b/350683/11017269.html?fpa=76&fpos=3&lastp=ch_home"
  8.     headers = {
  9.         "User-Agent" : "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:85.0) Gecko/20100101 Firefox/85.0",
  10.         "Referer" : "https://www.mgtv.com/b/350683/11017269.html?fpa=76&fpos=3&lastp=ch_home",
  11.         "Cookie" : "_source_=C; sessionid=1612414228797; lastActionTime=1612414263957; __STKUUID=4f03c23b-2473-4efd-b053-dca7f1cbb3fa; PLANB_FREQUENCY=YBtXlZNe8SbFKupp_21020410; __random_seed=0.6088150340245597; mba_deviceid=7b8b8a0b-e4a0-a176-696c-5b0cda9c9edd; beta_timer=1612414233215; PM_CHKID=c7d6aa914021ed17; MQGUID=1357149151464439808; __MQGUID=1357149151464439808; muteplaycount=2; muteplaytoday=1; mba_sessionid=eb61226f-3a55-0e25-1633-1a44c6abca9d; mba_last_action_time=1612414233340"
  12.     }

  13.     response = requests.get(url, headers=headers)

  14.     soup = BeautifulSoup(response.text, 'lxml')
  15.     divs = soup.find_all("div")
  16.     print(divs)
  17. if __name__ == "__main__":
  18.     get_div()
复制代码

  1. [<div data-server-rendered="true" id="__nuxt"><!-- --><div id="__layout"><div><noscript>
  2.     请启用 JavaScript
  3.   </noscript> <!-- --> <!-- --> <div class="m-video-error-infomessage" style="display:none;"><div class="video-error-infomessage"><h4>您将了解到本次错误原因:</h4><p>错误码:<em></em></p><p>错误详情:<em></em></p><p class="video-error-infomessage-closed"><a href="javascript:;">关闭</a></p></div></div> <!-- --></div></div></div>, <div id="__layout"><div><noscript>
  4.     请启用 JavaScript
  5.   </noscript> <!-- --> <!-- --> <div class="m-video-error-infomessage" style="display:none;"><div class="video-error-infomessage"><h4>您将了解到本次错误原因:</h4><p>错误码:<em></em></p><p>错误详情:<em></em></p><p class="video-error-infomessage-closed"><a href="javascript:;">关闭</a></p></div></div> <!-- --></div></div>, <div><noscript>
  6.     请启用 JavaScript
  7.   </noscript> <!-- --> <!-- --> <div class="m-video-error-infomessage" style="display:none;"><div class="video-error-infomessage"><h4>您将了解到本次错误原因:</h4><p>错误码:<em></em></p><p>错误详情:<em></em></p><p class="video-error-infomessage-closed"><a href="javascript:;">关闭</a></p></div></div> <!-- --></div>, <div class="m-video-error-infomessage" style="display:none;"><div class="video-error-infomessage"><h4>您将了解到本次错误原因:</h4><p>错误码:<em></em></p><p>错误详情:<em></em></p><p class="video-error-infomessage-closed"><a href="javascript:;">关闭</a></p></div></div>, <div class="video-error-infomessage"><h4>您将了解到本次错误原因:</h4><p>错误码:<em></em></p><p>错误详情:<em></em></p><p class="video-error-infomessage-closed"><a href="javascript:;">关闭</a></p></div>]
复制代码
最佳答案
2021-2-4 16:30:49
刚试了下,挺简单的,直接上代码
  1. import requests


  2. url = 'https://comment.mgtv.com/v4/comment/topComment'
  3. headers = {
  4.         'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36'
  5.     }
  6. params = {
  7. 'subjectType': 'hunantv2014',
  8. 'subjectId': '11017269',
  9. 'callback': 'jQuery1820687947209701939_1612456297450',
  10. '_support': '10000000',
  11. '_': '1612456299603'
  12. }
  13. res = requests.get(url, params=params, headers=headers)
  14. print(res.text)
复制代码

过程:
无标题.png
1、打开浏览器右键检查,点Network抓包
2、打开目标URL,等评论加载完成
3、点放大镜(search),搜索第一个评论人的名字---例如:芒果评论君
4、查找结果中查看headers
5、得到Request URL和parameters
6、构建代码,测试,完美拿到response,是一串json数据。。。
7、剩下的自己搞定吧,方法太多了,直接解析json比较快

最佳答案

查看完整内容

刚试了下,挺简单的,直接上代码 过程: 1、打开浏览器右键检查,点Network抓包 2、打开目标URL,等评论加载完成 3、点放大镜(search),搜索第一个评论人的名字---例如:芒果评论君 4、查找结果中查看headers 5、得到Request URL和parameters 6、构建代码,测试,完美拿到response,是一串json数据。。。 7、剩下的自己搞定吧,方法太多了,直接解析json比较快
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2021-2-4 16:30:49 | 显示全部楼层    本楼为最佳答案   
刚试了下,挺简单的,直接上代码
  1. import requests


  2. url = 'https://comment.mgtv.com/v4/comment/topComment'
  3. headers = {
  4.         'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36'
  5.     }
  6. params = {
  7. 'subjectType': 'hunantv2014',
  8. 'subjectId': '11017269',
  9. 'callback': 'jQuery1820687947209701939_1612456297450',
  10. '_support': '10000000',
  11. '_': '1612456299603'
  12. }
  13. res = requests.get(url, params=params, headers=headers)
  14. print(res.text)
复制代码

过程:
无标题.png
1、打开浏览器右键检查,点Network抓包
2、打开目标URL,等评论加载完成
3、点放大镜(search),搜索第一个评论人的名字---例如:芒果评论君
4、查找结果中查看headers
5、得到Request URL和parameters
6、构建代码,测试,完美拿到response,是一串json数据。。。
7、剩下的自己搞定吧,方法太多了,直接解析json比较快
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2021-5-17 16:53:57 | 显示全部楼层
笨鸟学飞 发表于 2021-2-4 16:30
刚试了下,挺简单的,直接上代码
过程:

我用这个方法去爬了另一个网站(http://xwmyey.xwjy.cn/#/fifth/category/schoolNews/notice)的公告列表。最后返回的是“服务器内部错误”,请问有什么解决办法吗。
  1. url = 'http://xwmyey.xwjy.cn/serviceApi/sysNotice/notice/page'


  2. headers = {
  3.         'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36 Edg/90.0.818.62'
  4.     }

  5. params = {
  6.     'timestamp':'1621240123192'
  7. }

  8. strhtml = requests.get(url,params=params,headers=headers)
  9. print(strhtml.text)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-23 17:11

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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