记第一个爬虫 f.write()写入中文出错解决办法

这个程序用来爬取我在博客园所有文章的标题,并用文件存起来。

from requests_html import HTMLSession

base_url = 'https://www.cnblogs.com/lfri/default.html?page='
id = 1

def get_title(url):
    global id #在函数内部修改全局变量的值,要先用global声明全局变量。
    session = HTMLSession()
    r = session.get(url)
    r.html.render(scrolldown=3, sleep=0.01)  #下拉3次
    titles = r.html.find('a.postTitle2')
    print(len(titles))
    with open('titles.txt', 'a', encoding="utf-8") as f:  #使用utf-8编码
        for i, title in enumerate(titles):
            s = f'{id} [{title.text}]({title.attrs["href"]})'
            print(s)
            f.write(s + '\n')
            id = id + 1

if __name__ == '__main__':
    for x in range(20, 21):
        print('当前页面: '+ str(x))
        get_title(base_url+str(x))

效果:

遇到的问题

1. UnicodeEncodeError: 'gbk' codec can't encode character '\xf6' in position 30: illegal multibyte sequence

解决方法:原因在于出现了gbk无法编码的字符,我有篇博客出现了“Möbius”。改成utf-8编码即可,一种方法是将encoding="utf-8"参数加到file.open()中。

2. 写入到文件中没有换行

解决方法:在字符串末尾加上 '\n' 。

参考链接:

1. f.write()写入中文出错解决办法

2. Python中将变量按行写入txt文本中

猜你喜欢

转载自www.cnblogs.com/lfri/p/12198782.html