鱼C论坛

 找回密码
 立即注册
查看: 822|回复: 5

[已解决]爬豆瓣电影TOP250

[复制链接]
发表于 2020-6-3 14:47:05 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
import time
import codecs
import requests  
import lxml.html  

with codecs.open('movies.txt','w','utf-8') as f:
    myheaders = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36"} 
    url_tpl = 'https://movie.douban.com/top250?start={}&filter='
    
    for page in range(10):
        print('正在获取第{}页'.format(page+1))
        start = page * 25
        url = url_tpl.format(start)
  
        http_response = requests.get(url,headers=myheaders)  
        http_response.encoding = 'utf-8'  
        html = lxml.html.fromstring(http_response.text)  
        movies = html.xpath('//*[@id="content"]/div/div[1]/ol/li')  

        for movie in movies:
            movie_text = str(movie.text_content())
            clean_movie_text = movie_text.replace('\n',"")
            print(clean_movie_text,file=f)
        
        time.sleep(5)

为什么打开文件要用 codecs.open,试了一下去掉codecs报错,百度了codecs的作用是编码转化,还是不大理解。
最佳答案
2020-6-3 15:36:54
jump_p 发表于 2020-6-3 15:34
既然codecs可以统一为 Unicode 编码并写入文件
那为什么这里codecs.open('movies.txt','w','utf-8') ,o ...

加上这个免去了转码的繁琐操作呀,最终以utf-8形式写入文件 中间过程免去了 decode 然后 encode 转回utf-8
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-6-3 14:52:26 | 显示全部楼层
codecs 统一为 Unicode 编码 进行写入文件,因为爬虫爬取的数据有可能是其他编码的

用这个操作替代 先 decode  然后在 encode 转码 比较麻烦的操作
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-3 14:56:39 | 显示全部楼层
如果你想去掉codecs 就要把参数加上 encoding  = 'utf-8'
因为 open 的第三个参数不是设置编码的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-6-3 15:34:13 | 显示全部楼层
Twilight6 发表于 2020-6-3 14:52
codecs 统一为 Unicode 编码 进行写入文件,因为爬虫爬取的数据有可能是其他编码的

用这个操作替代 先 d ...

既然codecs可以统一为 Unicode 编码并写入文件
那为什么这里codecs.open('movies.txt','w','utf-8') ,open的第三个参数还要设置为'utf-8'呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-3 15:36:54 | 显示全部楼层    本楼为最佳答案   
jump_p 发表于 2020-6-3 15:34
既然codecs可以统一为 Unicode 编码并写入文件
那为什么这里codecs.open('movies.txt','w','utf-8') ,o ...

加上这个免去了转码的繁琐操作呀,最终以utf-8形式写入文件 中间过程免去了 decode 然后 encode 转回utf-8
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-6-3 15:41:21 | 显示全部楼层
Twilight6 发表于 2020-6-3 15:36
加上这个免去了转码的繁琐操作呀,最终以utf-8形式写入文件 中间过程免去了 decode 然后 encode 转回utf- ...

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-20 21:52

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表