豆瓣网手游影评:如何获取真正请求的地址和请求?

优采云 发布时间: 2021-07-23 22:18

  豆瓣网手游影评:如何获取真正请求的地址和请求?

  [一、项目背景]

  豆瓣电影提供最新的电影介绍和影评,包括正在放映的电影的视频查询和购票服务。可以录制自己想看的电影电视剧,顺便看,打分,写影评。极大地方便了人们的生活。

  今天以电视剧(美剧)为例,批量抓取对应的电影,写入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、software: PyCharm

  [四、项目分析]

  1、如何请求多个页面?

  当您单击下一页时,每增加一页,paged 将增加 20。使用{}替换转换后的变量,然后使用for循环遍历URL实现多个URL请求。

  2. 如何获取实际请求的地址?

  在请求数据时,发现页面上没有对应的数据。其实豆瓣是用javascript动态加载内容来防止采集的。

  1)F12 右击查看,在左侧菜单中找到Network,和name,找到第五个数据,点击Preview。

  2)点击主题,可以看到title是对应电影的名字。率是相应的分数。通过js解析subjects字典,找到需要的字段

  3. 如何访问网页?

  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、for 遍历获取对应的电影名称、评分以及下一个详情页的链接。

   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、picture 地址提出请求。定义图片名称并保存文档。

   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、调用方法实现功能。

  9、项目优化:1)设置延时。

   time.sleep(1.4)

  2)定义了一个变量u,用于遍历,表示爬取的是哪个页面。 (更清晰,更令人印象深刻)。

   u = 0

self.u += 1;

  [六、效果展示]

  1、点击绿色三角运行起始页和结束页(从第0页开始)。

  2、 会在控制台显示下载成功的信息。

  3、保存 csv 文件。

  4、film 图片展示。

  [七、Summary]

  1、 不建议取太多数据,可能造成服务器负载,简单试一下。

  2、本文章针对Python爬取豆瓣应用中的难点和关键点,以及如何防止反爬,做了相关的解决方案。

  3、希望通过这个项目,可以帮助大家了解json解析页面的基本流程,如何拼接字符串,如何使用format函数。

  4、本文基于Python网络爬虫,利用爬虫库实现豆瓣电影及其图片的获取。说到实现,总会有各种各样的问题。不要看最好的,努力去更深入地理解。

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线