爬虫实战:爬取糗事百科段子到 txt 文件中

先看效果:
在这里插入图片描述

说实话这次爬虫遇到了一点问题。当我将段子写入 txt 文件时发生如下错误:
在这里插入图片描述
查询资料后了解到, txt 文件的默认编码是 GBK 编码而不是 Unicode 编码,所以我们需要自己设置编码方式。解决方法:

导入模块:import codecs
打开文件时:with codecs.open(‘d:\file.txt’, ‘w’, ‘utf-8’)as file:

如此操作后可正常运行。参考链接:https://blog.csdn.net/yq0632/article/details/80254587

以下是代码内容:

导入模块:

import re
import codecs
from urllib import request, error
from  bs4 import BeautifulSoup

获取 html 网页内容:

def askurl(url):
    try:
        headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36'}
        req = request.Request(url=url, headers=headers)
        respond = request.urlopen(req)
        html = respond.read().decode('utf-8')
        return html
    except error.URLError as e:
        if hasattr(e, 'code'):
            print(e.code)
        if hasattr(e, 'reason'):
            print(e.reason)

解析网页:

FindName = re.compile(r'<h2>(.*?)</h2>', re.S)
FindContent = re.compile(r'<span>(.*?)</span>', re.S)

def getdata():
    datalist = []
    baseurl = 'https://www.qiushibaike.com/text/page/'
    for i in range(10):
        url = baseurl + str(i+1)
        html = askurl(url)
        soup = BeautifulSoup(html, 'html.parser')
        for item in soup.find_all('div', {'class':'article block untagged mb15 typs_hot'}):
            item = str(item)
            name = FindName.findall(item)[0]
            name = name.replace('\n', '')
            content = FindContent.findall(item)[0]
            content = content.replace('\n\n\n', '')
            content = content.replace('<br/>', '\n')
            datalist.append([name, content])
    return datalist

保存数据:

def savedata(savepath):
    datalist = getdata()
    with codecs.open(savepath, 'w', 'utf-8') as file:
        for i in range(len(datalist)):
            file.write('用户'+str(i+1)+'是   -->   ')
            file.write(datalist[i][0])
            file.write('\n')
            file.write('段子   -->   ')
            file.write(datalist[i][1])
            file.write('\n')

主函数运行:

def main():
    savedata('d:\\糗事百科段子.txt')




if __name__=='__main__':
    main()


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值