文章采集调用(豆瓣网影评:《美剧》中如何获取请求?)
优采云 发布时间: 2021-10-17 04:08文章采集调用(豆瓣网影评:《美剧》中如何获取请求?)
【一、项目背景】
豆瓣影业提供最新的电影介绍和影评,包括正在放映的电影的视频查询和购票服务。顺便可以录下想看的电影和电视剧,看,看,还可以写影评。它极大地方便了人们的生活。
今天以电视剧(美剧)为例,批量抓取对应的电影,写入csv文件。用户可以通过评分更好地选择自己想要的电影。
【二、项目目标】
获取对应的电影名称、评分、详情链接,下载电影图片,保存文件。
[三、 涉及的图书馆和 网站]
1、 网址如下:
https://movie.douban.com/j/search_subjects?type=tv&tag=%E7%BE%8E%E5%89%A7&sort=recommend&page_limit=20&page_start={}
2、 涉及的库:requests、fake_useragent、json、csv
3、软件:PyCharm
【四、项目分析】
1、如何请求多个页面?
当您单击下一页时,每增加一页,paged 将增加 20。使用{}替换转换后的变量,然后使用for循环遍历URL实现多个URL请求。
2、如何获取实际请求的地址?
在请求数据时,发现页面上没有对应的数据。其实豆瓣是通过javascript动态加载内容来防止采集的。
1)F12 右击查看,在左侧菜单中找到Network,和name,找到第五个数据,点击Preview。
2) 点击subjects,可以看到title是对应电影的名字。率是相应的分数。通过js解析subjects字典,找到需要的字段。
如何访问网页?
https://movie.douban.com/j/search_subjects?type=tv&tag=%E7%BE%8E%E5%89%A7&sort=recommend&page_limit=20&page_start=0
https://movie.douban.com/j/search_subjects?type=tv&tag=%E7%BE%8E%E5%89%A7&sort=recommend&page_limit=20&page_start=20
https://movie.douban.com/j/search_subjects?type=tv&tag=%E7%BE%8E%E5%89%A7&sort=recommend&page_limit=20&page_start=40
https://movie.douban.com/j/search_subjects?type=tv&tag=%E7%BE%8E%E5%89%A7&sort=recommend&page_limit=20&page_start=60
单击下一页时,每增加一页,该页将增加 20。使用{}替换转换后的变量,然后使用for循环遍历URL,实现多个URL请求。
【五、项目实施】
1、我们定义一个类继承对象,然后定义init方法继承self,再定义一个main函数main继承self。导入所需的库和请求 URL。
import requests,json
from fake_useragent import UserAgent
import csv
class Doban(object):
def __init__(self):
self.url = "https://movie.douban.com/j/search_subjects?type=tv&tag=%E7%BE%8E%E5%89%A7&sort=recommend&page_limit=20&page_start={}"
def main(self):
pass
if __name__ == '__main__':
Siper = Doban()
Siper.main()
2、 随机生成UserAgent,构造请求头,防止反爬。
for i in range(1, 50):
self.headers = {
'User-Agent': ua.random,
}
3、发送请求,获取响应,页面回调,方便下次请求。
def get_page(self, url):
res = requests.get(url=url, headers=self.headers)
html = res.content.decode("utf-8")
return html
4、json 解析页面数据,获取对应的字典。
data = json.loads(html)['subjects']
# print(data[0])
5、进行遍历,获取对应的电影名,评分,链接到下一个详情页。
print(name, goblin_herf)
html2 = self.get_page(goblin_herf) # 第二个发生请求
parse_html2 = etree.HTML(html2)
r = parse_html2.xpath('//div[@class="entry"]/p/text()')
6、创建一个用于写入的csv文件,定义相应的header内容,并保存数据。
# 创建csv文件进行写入
csv_file = open('scr.csv', 'a', encoding='gbk')
csv_writer = csv.writer(csv_file)
# 写入csv标题头内容
csv_writerr.writerow(['电影', '评分', "详情页"])
#写入数据
csv_writer.writerow([id, rate, urll])
7、求图片地址。定义图片的名称并保存文档。
html2 = requests.get(url=urll, headers=self.headers).content
dirname = "./图/" + id + ".jpg"
with open(dirname, 'wb') as f:
f.write(html2)
print("%s 【下载成功!!!!】" % id)
8、 调用方法来实现功能。
html = self.get_page(url)
self.parse_page(html)
9、项目优化:
1) 设置时间延迟。
time.sleep(1.4)
2) 定义一个变量u,用于遍历,表示爬取的是哪个页面。(更清晰,更令人印象深刻)。
u = 0
self.u += 1;
[六、效果展示]
1、 点击绿色三角进入起始页和结束页(从第0页开始)。
2、 在控制台显示下载成功信息。
3、保存csv文件。
4、电影图片显示。
[七、总结]
1、 不建议抓取太多数据,可能造成服务器负载,简单试一下。
2、本文章针对Python爬豆豆应用中的难点和关键点,以及如何防止回爬等问题,做了一个相对的解决方案。
3、希望这个项目能帮助大家了解json解析页面的基本流程,如何拼接字符串,如何使用format函数。
4、 本文基于Python网络爬虫,利用爬虫库实现豆瓣电影及其图片的获取。说到实现,总会有各种各样的问题。不要看最好的,努力去更深入地理解。
5、需要本文源码的可以在后台回复“豆瓣电影”获取。
看完这篇文章你学会了吗?请转发并分享给更多人
IT共享之家