丶霁灵 发表于 2020-4-1 14:02:50

python爬虫爬到的网页源码和按F12查看的网页源码不一致问题

本帖最后由 丶霁灵 于 2020-4-1 16:40 编辑

刚学完小甲鱼的爬虫课,尝试爬取一网站的图片成功了,然后就想试试爬取网易云音乐的评论
这是还没有完成的代码
import urllib.request
import os
import re

def open_url(url):
    '''
打开url
    '''
    req = urllib.request.Request(url)
    req.add_header('user-agent','Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36')
   
    '''检测连接失败错误'''
    count = 0
    while 1:
      if count == 10:            
            temp =input('此连接(%s)已经失败10次,按任意键继续',url)
      try:
            response = urllib.request.urlopen(req)
      except urllib.error.HTTPError as e:
            print("服务器没有响应")
            print("Error code:",e.code)
            count += 1
            continue
      except urllib.error.URLError as e:
            print("链接服务器失败")
            print("Reason:",e.reason)
            count += 1
            continue
      else:
            html = response.read().decode('utf-8')
            break
    '''检测连接失败错误'''
   
    #print(html)
    return(html)
    #pass

def find_song(url):
    '''
在此界面找到所有音乐
    '''
    html = open_url(url)
    print(html)
    p = re.compile(r'(<a href="/song?id=\d?)"><b title="(.?)">')
    song_url_list = p.findall(html)
    print(song_url_list)#------------------------------------------------------------这里面一直是空的
    return(song_url_list)
    #pass
   
def find_review(url):
    '''
在此界面找到所有精彩评论
    '''
    pass

def download(url):
    '''
网易云前100音乐精彩评论爬虫
    '''
    os.chdir(os.curdir)
   
    song_url_list = find_song(url)
    for i in song_url_list:
      review_list = find_review(i)
      with open(i+".txt",'w+',encoding='utf-8') as f:
            for j in review_list:
                f.write(j+':'+j)
                f.write('\n')
    temp = input('爬取完成,按任意键继续')

if __name__ == '__main__':
    url = 'https://music.163.com/#/discover/toplist'
    download(url)


我的想法是先找到排行榜上的歌曲,然后进去爬评论。
然后我发现爬的歌曲列表一直是空的,html解析正常,但是就是搜不到。我单独保存了html去用ctrl+f原来也搜不到。
对照了一下我发现我爬到的html和我在浏览器按F12看到的并不一样,少东西

请问这种情况该怎么办呢?

百度了说一种是直接从JavaScript中采集加载的数据,用json模块处理;

                  另一种方式是直接采集浏览器中已经加载好的数据,借助工具--PhantomJS

请问有没有学了现行课程能简单掌握的方法?

丶霁灵 发表于 2020-4-1 14:26:49

有没有大大前来救场

Hoiste 发表于 2020-4-1 15:27:35

网易云有个反爬机制,多数情况下可以通过去掉井号来解决问题,有个别情况则需要一些别的模块帮助,我试了一下把url改成了https://music.163.com/discover/toplist(就是去掉了井号)然后HTML复制到TXT没有问题,应该不是麻烦的情况,接下来进入到歌曲里面爬取评论看看是不是也需要去掉井号吧。

永恒的蓝色梦想 发表于 2020-4-1 15:39:33

网易云会用一种奇奇怪怪的方式来加密歌名

丶霁灵 发表于 2020-4-1 16:25:06

Hoiste 发表于 2020-4-1 15:27
网易云有个反爬机制,多数情况下可以通过去掉井号来解决问题,有个别情况则需要一些别的模块帮助,我试了一 ...

学到了,这就去和网易云对线

Hoiste 发表于 2020-4-1 16:32:42

丶霁灵 发表于 2020-4-1 16:25
学到了,这就去和网易云对线

这个不能解决所有问题,如果只是要爬一些确定的对象的话还好,但是涉及搜索等功能就不好用了,如果要深入学习爬虫的话最好多去看一下大神们爬网易云的代码。

丶霁灵 发表于 2020-4-1 16:34:44

永恒的蓝色梦想 发表于 2020-4-1 15:39
网易云会用一种奇奇怪怪的方式来加密歌名

貌似不管用呢 还是爬不到
页: [1]
查看完整版本: python爬虫爬到的网页源码和按F12查看的网页源码不一致问题