这个程序用来爬取我在博客园所有文章的标题,并用文件存起来。
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文本中
个性签名:时间会解决一切