山野村夫-陈墨 发表于 2019-7-18 23:27

爬取豆瓣华语电影

本帖最后由 山野村夫-陈墨 于 2019-7-20 21:48 编辑

本来是要爬“吾爱破解”的,结果被反了。换了个目标,向豆瓣电影下手。
还是拿“软柿子“下手。


'''
    豆瓣 华语 电影
    可见网站:
    https://movie.douban.com/explore#!type=movie&tag=%E5%8D%8E%E8%AF%AD&sort=recommend&page_limit=20&page_start=0
    时间:2019年7月18日
'''
importrequests
importjson
fromlxml import etree

defget_message(start_page):
    url = "https://movie.douban.com/j/search_subjects?type=movie&tag=%E5%8D%8E%E8%AF%AD&sort=recommend&page_limit=20&page_start={}".format(start_page)
    header ={"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36",
             "Upgrade-Insecure-Requests": "1",}
    response = requests.get(url,headers= header)
    html_str = response.text
    #得到的数据直接是json数据,所以直接处理
    str = json.loads(html_str)
    #返回列表数据
    return str["subjects"]

defsave(record):
    with open("国语电视剧.txt","w",encoding="utf-8") as f:
      foriin range(len(record)):
            f.write("\n"+str(i+1)+"、")
            f.write(str(record))
            print(record)

    print("保存结束!")


if __name__ == "__main__":
   start_page = 0
   record=[]
   #网页start_page最大为 220
   while start_page<=220:
      #1.得到数据;
      channel_list = get_message(start_page)
      #2.追加数据;
      record.extend(channel_list)
      #extend把列表数据按照列表元素添加到列表中
      start_page+=20
   #3.简单处理:按照评分从高到底排序,sorted临时排序
   record = sorted(record,key=lambda keys:keys['rate'],reverse=True)
   #4.数据保存
   save(record)



关于上次的爬虫这次又加数据保存到“.csv”文件中,以及对数据的读取后的简单处理,
不想冲帖子数目,就补录吧
'''
    豆瓣 华语 电影
    可见网站:
    https://movie.douban.com/explore#!type=movie&tag=%E5%8D%8E%E8%AF%AD&sort=recommend&page_limit=20&page_start=0
    时间:2019年7月20日
   
'''
importrequests
importjson
import csv
import pandas as pd


defget_message(start_page):
    url = "https://movie.douban.com/j/search_subjects?type=movie&tag=%E5%8D%8E%E8%AF%AD&sort=recommend&page_limit=20&page_start={}".format(start_page)
    header ={"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36",
             "Upgrade-Insecure-Requests": "1",}
    response = requests.get(url,headers= header)
    html_str = response.text
    #得到的数据直接是json数据,所以直接处理
    str = json.loads(html_str)
    #返回列表数据
    return str["subjects"]

defsave_csv(list):
    key_list = []
    for keyin list.keys():
      key_list.append(key)
    print(key_list)
    #在这儿注意 "newline",可以尝试一下有newline和没有newline的结果
    with open("豆瓣华语电影.csv","w",encoding="utf-8",newline="") as f:
      f_csv = csv.writer(f)
      #写标题
      f_csv.writerow(key_list)
      #读取列表中嵌套的字典的数据,一行一行写入csv数据
      for i in range(len(list)):
            #每次清空,不然和会重复
            value=[]
            forjinrange(len(key_list)):
                value.append( list])
            print(value)
            f_csv.writerow(value)


defsave_txt(record):
    with open("国语电视剧.txt","w",encoding="utf-8") as f:
      foriin range(len(record)):
            f.write("\n"+str(i+1)+"、")
            f.write(str(record))
            #print(record)

    print("保存结束!")

def choose():
    tmp_csv = pd.read_csv('豆瓣华语电影.csv', index_col=1)
    tmp_csv = tmp_csv > 6.0]
    tmp_csv.to_csv('豆瓣02_1.csv', sep=',')

if __name__ == "__main__":
   start_page = 0
   record=[]
   #网页start_page最大为 220
   while start_page<=220:
      #1.得到数据;
      channel_list = get_message(start_page)
      #2.追加数据;
      record.extend(channel_list)
      #extend把列表数据按照列表元素添加到列表中
      start_page+=20
   #3.简单处理:按照评分从高到底排序,sorted临时排序
   record = sorted(record,key=lambda keys:keys['rate'],reverse=True)
   #4.数据保存csv
   save_csv(record)
   #5.数据保存txt
   save_txt(record)
   #6.数据的简单的处理:选取评分大于6.0的电影
   choose()
   


山野村夫-陈墨 发表于 2019-11-28 19:42

hfg123 发表于 2019-11-27 19:34
大佬,现在那个搜索接口请求头是要加"Upgrade-Insecure-Requests"这个才能爬取吗?

应该是需要,请求头里有的东西可以用来反爬虫,所以加上比较好。 时间很长了,我也忘了

hfg123 发表于 2019-11-28 22:07

山野村夫-陈墨 发表于 2019-11-28 19:42
应该是需要,请求头里有的东西可以用来反爬虫,所以加上比较好。 时间很长了,我也忘了
测试一下,只要请求头就ok了

22shiji 发表于 2019-7-19 01:41

正好需要豆瓣电影

不美却独一无二 发表于 2019-7-19 06:10

不错,刚好需要

坐久落花多 发表于 2019-7-19 07:57

看起来不错
谢谢分享

2623666 发表于 2019-7-19 07:57

;www楼主想拿吾爱下手啊

ghoob321 发表于 2019-7-19 08:08


不错,刚好需要正在学习

zorro7434 发表于 2019-7-19 08:31

下来学习一下

daymissed 发表于 2019-7-19 08:33

这个怎么玩啊,不会玩,请教大神

hs_f 发表于 2019-7-19 08:45

赞一个。厉害。

ghoob321 发表于 2019-7-19 08:54

怎么去掉哪些英文字母
页: [1] 2
查看完整版本: 爬取豆瓣华语电影