爬取B站评论(2019.5.28)

看到B站一个up主使用人工统计楼层,去除重复用户,然后excel抽奖,感觉太费劲了,帮他写了个小脚本,代码没亮点,只实现了最基本的爬用户id和抽奖功能,没有做模块化处理,也没有加入多线程提高速度,后续慢慢学习继续丰富

1、原始版本(2019.5.28)

#!/usr/bin/env python
# coding: utf-8
import requests 
import json
import random
import os

av_id=input('输入av_id   ')  # 视频号

r=requests.get(
    'https://api.bilibili.com/x/v2/reply?jsonp=jsonp&pn=1&type=1&oid={}&sort=2&_=1558948726737'.format(av_id))  
    # 这个json地址获取方法:随便找一个评论用户的ID,在网页F12中CTRL+f 搜索 ,可以找到一个地址,复制地址,去掉callback回调部分
data=json.loads(r.text)
page_count=(data['data']['page']['count'])//20+1  # 获取总页数,本来想用xpath直接爬到总页数,后来发现json里有个count总楼层数统计,所以可以计算出总页数
# pprint.pprint(data['data']['replies'])
# 这个json里不只有用户id ,而且能找到用户评论,楼中楼的用户ID 评论等

user_list=[] # 保存用户名

for pg_num in range(1,page_count+1):  # 循环获取所有页面上的用户名,这地方运行速度慢,后续尝试利用多线程加快速度
    print('爬取第{}页...'.format(pg_num))
    r=requests.get(
    'https://api.bilibili.com/x/v2/reply?jsonp=jsonp&pn={}&type=1&oid={}&sort=2&_=1558948726737'.format(pg_num,av_id))
    data=json.loads(r.text)

    for i in data['data']['replies']:  # 每页有20层楼,遍历这20层楼获取ID
    #     pprint.pprint(i['member']['uname'])
        user_list.append(i['member']['uname'])


print('所有评论用户的id',user_list)

# 所有评论用户的id

# 抽奖模块
print('\n\n\n\n')
print('原长度:',len(user_list),'去重后的长度:',len(set(user_list)))  # 去重 ,防止多次回复拉高中奖几率

luck_user=random.choice(user_list)
print('幸运观众:',luck_user)
os.system("pause") # 如果是直接双击运行该文件,那么运行完成后cmd窗口会直接关闭,加入这一条便于查看输出结果,当然也可以把运行结果写入txt文件内

json请求地址获取:
wow!awesome man!!
在这里插入图片描述

### 回答1: 好的,以下是使用Scrapy框架爬取豆瓣电影Top250的电影名称的步骤: 1. 创建 Scrapy 项目 在命令行中输入以下命令,创建一个名为 `douban_movies` 的 Scrapy 项目: ``` scrapy startproject douban_movies ``` 2. 创建爬虫 在 Scrapy 项目目录下,使用以下命令创建一个名为 `movies` 的爬虫: ``` scrapy genspider movies movie.douban.com ``` 这个命令将在 `douban_movies/spiders` 目录下创建一个名为 `movies.py` 的文件,它包含了一个名为 `MoviesSpider` 的类,我们可以在这个类中编写爬虫代码。 3. 编写爬虫代码 打开 `movies.py` 文件,在 `MoviesSpider` 类中添加以下代码: ```python import scrapy class MoviesSpider(scrapy.Spider): name = 'movies' allowed_domains = ['movie.douban.com'] start_urls = ['https://movie.douban.com/top250'] def parse(self, response): for movie in response.css('.grid_view li'): yield { 'title': movie.css('.title::text').get(), } next_page = response.css('.next a::attr(href)').get() if next_page is not None: yield response.follow(next_page, self.parse) ``` 这个爬虫代码的逻辑比较简单: - `name`:爬虫的名称。 - `allowed_domains`:允许爬取的域名。 - `start_urls`:开始爬取的 URL。 - `parse`:解析响应内容,提取电影名称。 4. 运行爬虫 在命令行中切换到 Scrapy 项目目录下,使用以下命令运行爬虫: ``` scrapy crawl movies -o movies.csv ``` 这个命令将启动爬虫,并将爬取到的电影名称保存到名为 `movies.csv` 的 CSV 文件中。 5. 结果展示 最后,使用 Excel 或者文本编辑器打开 `movies.csv` 文件,即可看到爬取到的豆瓣电影 Top250 的电影名称。 ### 回答2: 使用Scrapy框架可以很方便地爬取网站数据。首先,我们需要在Scrapy项目中创建一个新的Spider,来定义爬取的规则和启动URL。 在Spider中,我们需要定义start_urls使其指向目标网站(http://www.movie.douban/top250),然后定义一个方法用于解析网页,提取所需的电影名称数据。 在解析方法中,我们使用XPath或CSS选择器来定位网页中的电影名称元素,并将其提取出来。然后,我们可以将提取出的电影名称存储到一个列表中。 最后,我们可以将列表中的电影名称打印输出,或者保存到文件中。这样,我们就成功地使用Scrapy爬取了www.movie.douban/top250网站上的电影名称。以下是具体的代码示例: ``` import scrapy class MovieSpider(scrapy.Spider): name = 'movie_spider' start_urls = ['http://www.movie.douban/top250'] def parse(self, response): # 使用XPath选择器提取电影名称元素 movie_names = response.xpath('//div[@class="hd"]/a/span[@class="title"]/text()').extract() # 存储电影名称 movie_list = [] for movie_name in movie_names: movie_list.append(movie_name.strip()) # 打印输出电影名称 for movie in movie_list: print(movie) # 或者将电影名称保存到文件中 # with open('movie_names.txt', 'w') as f: # for movie in movie_list: # f.write(movie + '\n') ``` 需要注意的是,上述代码只是一个简单的示例,实际中可能还需要处理翻页、反爬虫策略等问题。此外,还应该遵守网站的Robots协议,尊重网站的限制措施。 ### 回答3: 使用Scrapy爬取豆瓣电影Top250的电影名称需要以下步骤: 1. 新建一个Scrapy项目:在命令行中进入到你想要创建项目的目录,并执行以下命令:`scrapy startproject douban_movies` 2. 创建一个Spider:进入到项目目录中,执行以下命令创建一个Spider:`scrapy genspider movies_spider movie.douban/top250` 3. 在Spider中编写代码:找到并打开spiders文件夹中的movies_spider.py文件,然后在`start_urls`列表中添加豆瓣电影Top250的URL地址:`start_urls = ['https://movie.douban.com/top250']`。 4. 在`parse`方法中解析网页内容:使用XPath或者CSS选择器来定位电影名称所在的位置,并提取电影名称。可以使用Chrome浏览器的开发者工具来看网页源代码并分析其中的元素结构。 5. 爬取结果处理:可以直接打印或保存提取的电影名称,也可以将结果保存到一个文件或数据库中。 6. 运行爬虫:在命令行中进入到项目目录,并执行命令:`scrapy crawl movies_spider`。 7. 等待爬虫运行完毕并输出结果。 以上是使用Scrapy爬取豆瓣电影Top250的电影名称的基本步骤,请根据实际需要进行相应的代码编写和调试。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Systemd

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值