jump_p 发表于 2020-6-3 14:47:05

爬豆瓣电影TOP250

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/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的作用是编码转化,还是不大理解。

Twilight6 发表于 2020-6-3 14:52:26

codecs 统一为 Unicode 编码 进行写入文件,因为爬虫爬取的数据有可能是其他编码的

用这个操作替代 先 decode然后在 encode 转码 比较麻烦的操作

Twilight6 发表于 2020-6-3 14:56:39

如果你想去掉codecs 就要把参数加上 encoding= 'utf-8'
因为 open 的第三个参数不是设置编码的

jump_p 发表于 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'呢

Twilight6 发表于 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

jump_p 发表于 2020-6-3 15:41:21

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

{:10_275:}
页: [1]
查看完整版本: 爬豆瓣电影TOP250