码迷,mamicode.com
首页 > Windows程序 > 详细

Scrapy 抓取网易云音乐评论 不需要API 速度快 【3】

时间:2020-11-11 15:56:04      阅读:17      评论:0      收藏:0      [点我收藏+]

标签:mat   headers   als   user   false   class   点赞   style   开关   

技术图片

 

 首先在spiders下,创建muouren.py

import scrapy
import json
import time
class MyspiderSpider(scrapy.Spider):
    name = "muou"
    

    def start_requests(self):
        urls = [http://music.163.com/api/v1/resource/comments/R_SO_4_1374051000?&offset=%s % i for i in range(1, 1000)]  # 抓取9页
        for url in urls:
            yield scrapy.Request(url=url, callback=self.parse)
    def parse(self, response):
        with open(music_comments.csv, a, encoding=utf-8_sig) as f:
            response = json.loads(response.text)
            comments = response[comments]
            for comment in comments:
                # 用户名

                user_name = comment[user][nickname].replace(,, )

                # 用户ID

                user_id = str(comment[user][userId])

                # 评论内容

                com = comment[content].strip().replace(\n, ‘‘).replace(,, )

                # 评论ID

                comment_id = str(comment[commentId])

                # 评论点赞数

                praise = str(comment[likedCount])

                # 评论时间

                date = time.localtime(int(str(comment[time])[:10]))

                structed_date = time.strftime("%Y-%m-%d %H:%M:%S", date)

                print(user_name, user_id, com, comment_id, praise, structed_date)

                f.write(
                    user_name + , + user_id + , + com + , + comment_id + , + praise + , + structed_date + \n)

然后middlewares.py 写入

class NovelUserAgentMiddleWare(object): #随即user_AGENT
    def __init__(self):
        self.user_agent_list = [
           "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/22.0.1207.1 Safari/537.1"
            "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.6 (KHTML, like Gecko) Chrome/20.0.1092.0 Safari/536.6",
            "Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.6 (KHTML, like Gecko) Chrome/20.0.1090.0 Safari/536.6",
            "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/19.77.34.5 Safari/537.1","Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.9 Safari/536.5",
            "Mozilla/5.0 (Windows NT 6.0) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.36 Safari/536.5",
             "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1063.0 Safari/536.3",
             "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1063.0 Safari/536.3",
            "Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1062.0 Safari/536.3",
            "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1062.0 Safari/536.3",
            "Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1061.1 Safari/536.3",
             "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1061.1 Safari/536.3",
             "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1061.1 Safari/536.3",
            "Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1061.0 Safari/536.3",
            "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/535.24 (KHTML, like Gecko) Chrome/19.0.1055.1 Safari/535.24",
       ]

    def process_request(self, request, spider):
        import random
        ua = random.choice(self.user_agent_list)
        print(User-Agent: + ua)
        request.headers.setdefault(User-Agent, ua)
#也在middlewares 件中添加类
class NovelProxyMiddleWare(object): #随即IP

    def process_request(self, request, spider):
        proxy = self.get_random_proxy()
        print("Request proxy is {}".format(proxy))
        request.meta["proxy"] = "http://" + proxy

    def get_random_proxy(self):

        import random

        with open(a.txt, r, encoding="utf-8") as f:#打开IP的地址,前提这个目录下有#IP.txt
            txt = f.read()
            return random.choice(txt.split(\n))

然后在seetings里写入

DOWNLOADER_MIDDLEWARES = {

   muouren.middlewares.NovelUserAgentMiddleWare: 544, #随即user
   muouren.middlewares.NovelProxyMiddleWare: 543,#随即IP  ImagesRename 换成自己的
}
CONCURRENT_REQUESTS = 100
CONCURRENT_REQUESTS_PER_DOMAIN = 100
CONCURRENT_REQUESTS_PER_IP = 100
COOKIES_ENABLED = False
RETRY_ENABLED = True  #打开重试开关
RETRY_TIMES = 3  #重试次数
DOWNLOAD_TIMEOUT = 10  #超时
RETRY_HTTP_CODES = [429,404,403]  #重试

还要在同一目录下,放入抓取好的IP a.txt

这样就可以快速抓取1000页的数据,之后的评论需要用到API。

 

Scrapy 抓取网易云音乐评论 不需要API 速度快 【3】

标签:mat   headers   als   user   false   class   点赞   style   开关   

原文地址:https://www.cnblogs.com/aotumandaren/p/13764211.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!