首页 > 其他分享 >scrapy+selenium爬取网易云音乐评论

scrapy+selenium爬取网易云音乐评论

时间:2022-10-19 12:46:17浏览次数:50  
标签:return request selenium spider 爬取 scrapy import div

废话不多说,先卡主代码

 1 import scrapy
 2 from selenium.webdriver import Chrome
 3 from selenium.webdriver.common.by import By
 4 import time
 5 from CodeNav.items import CodenavItem
 6 
 7 
 8 class CodeSpider(scrapy.Spider):
 9     name = 'code'
10     # allowed_domains = ['www.xxx.com']
11     start_urls = ['https://music.163.com/#/playlist?id=2329680016']
12     bro = Chrome()
13 
14     # bro.page_source
15 
16     def parse(self, response, **kwargs):
17         div_list = response.xpath('/html/body/div[3]/div[1]/div/div/div[3]/div/div[2]/div[2]/div')
18         for div in div_list:
19             title = div.xpath('./div[2]/div[1]/div/a/text()').extract_first()
20             cnt = div.xpath('./div[2]/div[1]/div/text()').extract_first()
21             item = CodenavItem()
22             item['title'] = title
23             item['cnt'] = cnt
24 
25             # print(title + '   ' + cnt)
26             yield item
27 
28     def close(self, spider):
29         self.bro.quit()

 

```
再看中间件的代码

```

```

 1 # Define here the models for your spider middleware
 2 #
 3 # See documentation in:
 4 # https://docs.scrapy.org/en/latest/topics/spider-middleware.html
 5 
 6 from scrapy import signals
 7 
 8 # useful for handling different item types with a single interface
 9 from itemadapter import is_item, ItemAdapter
10 from scrapy.http import HtmlResponse
11 from selenium.webdriver.common.by import By
12 from time import sleep
13 
14 
15 class CodenavDownloaderMiddleware:
16 
17     def process_request(self, request, spider):
18         web = spider.bro
19         web.get(request.url)
20         sleep(2)
21         web.execute_script('window.scrollTo(0,document.body.scrollHeight)')
22         sleep(2)
23         web.switch_to.frame('g_iframe')  # 评论嵌套在了iframe里,括号里是iframe的id
24         sleep(2)
25         page_count = web.page_source
26         # print(page_count)
27         return HtmlResponse(url=request.url, body=page_count, encoding='utf-8', request=request)
28         # return None
29 
30     def process_response(self, request, response, spider):
31         # Called with the response returned from the downloader.
32 
33         # Must either;
34         # - return a Response object
35         # - return a Request object
36         # - or raise IgnoreRequest
37         return response
38 
39     def process_exception(self, request, exception, spider):
40         # Called when a download handler or a process_request()
41         # (from other downloader middleware) raises an exception.
42 
43         # Must either:
44         # - return None: continue processing this exception
45         # - return a Response object: stops process_exception() chain
46         # - return a Request object: stops process_exception() chain
47         pass
48 
49     def spider_opened(self, spider):
50         spider.logger.info('Spider opened: %s' % spider.name)

***Note***:网易云音乐的评论都嵌套在一个iframe中,需要switch to到对应的iframe框架中,改好以后可以打印出来看下
剩下的就是scrapy的基本操作了,这里我只为了练习selenium在scrapy的应用,所以只是爬了第一页评论,后续页的评论要做适当修改

标签:return,request,selenium,spider,爬取,scrapy,import,div
From: https://www.cnblogs.com/dabenshi/p/16805851.html

相关文章

  • scrapy 如何使用代理 以及设置超时时间
    使用代理1.单文件spider局部使用代理entry='http://xxxxx:[email protected]:xxx'.format("帐号","密码","端口号")#entry='http://{}'.format("api获取......
  • Selenium+Python系列 - 开发环境搭建
    一、写在前面我从未想过自己会写python系列的自动化文章,有些同学会问,那你现在为什么又开始写了?不止一个人找过我,问我可以写一些Python自动化的文章吗,答案是肯定的。笔......
  • selenium获取所有(包括被隐藏)的表头字段文本信息
      需要获取一个列表表头共18个字段的列表的表头其中前两个和后两个字段都在页面固定中间的字段需要根据滚动条滑动才能显示完全遇到的问题:正常按照以前的逻辑:先......
  • selenium基础之3大等待
     隐性和显性区别为:在显性的EC条件模块中,在selenium3.X当中,每一个条件都是由类实现的,每个类都有2个方法,__init__,__call__在selenium4.X当中,每一个条件是由函数实现的......
  • selenium验证码处理-获取验证码图片二进流数据转成原图保存
    1.因为视频的作者给的代码不完整,只有核心部分的代码。2.视频作者示例使用的第三方破解12306的脚本网页(失效了)所以本人无法复现,此次截取部分代码作为理解核心意思(思想方法......
  • 爬取博客园每周热点并试用jieba和wordcloud进行分词和生成词云
    说来惭愧,来到博客园也好几年了,养成了时不时来刷刷首页,学习下先进知识的习惯,不过一直都是纯输入没有输出,今天才发现我竟然连博客都没开通。恰好这两天拿博客园练手做了个小......
  • 「http代理」Python-Scrapy 代码样例(四)
    http代理使用提示1.http/https网页均可适用2.scrapy不是python原生库,需要安装才能使用:pipinstallscrapy3.在第一级tutorial目录下运行如下命令查看......
  • 「http代理」Python-Scrapy 代码样例(三)
    http代理使用提示1.http/https网页均可适用2.scrapy不是python原生库,需要安装才能使用:pipinstallscrapy3.在第一级tutorial目录下运行如下命令查看......
  • selenium 浏览器驱动下载安装(chrome)
    selenium下载地址https://pypi.org/project/selenium/4.0.0/#filesFireFox驱动下载地址https://github.com/mozilla/geckodriver/releaseschromeDriver下载地址ht......
  • selenium4-定位组元素
    总体思路:find_elements()该方法将所有定位到的元素放到一个列表中,再通过列表的下标定位到具体元素。例1、使用tagname定位到百度搜索框,并输入selenium关键字service......