python最简洁!最简单!爬取糗百笑话内容!(有详细说明)优质

31次浏览 | 2024-07-15 17:07:30 更新
来源 :互联网
最佳经验

简要回答

python最简洁!最简单!爬取糗百笑话内容!

最近突然想起了半年前上python实验课的时候老师布置的实验内容,爬取糗百笑话,印象非常深刻,当时只学了关于爬虫最基本的内容,虽然自己很感兴趣,但仅仅简单了解了相关库的基本的使用方法,根本无从下手(当时看了两个多小时的代码,全程懵逼,还记得当时连替换requests请求的headers都要百度),所谓说,老师领进门,修行靠自己,现在就弥补以下当时的遗憾(时间过得有点久,哈哈哈哈哈),用自己认为最简单!最简洁!的代码爬取一下。

首先给出目标网页的第一页的url:

糗百官网

上代码:

1.所要用到的库:

import requests
from bs4 import BeautifulSoup
import re

老样子,requests库主要用来发起请求获得目标网页的源代码,BeautifulSoup库和re库组合使用,利用正则表达式***一行代码***抓取所要的内容。

2.给出整体程序的执行流程(是不是一看就明白呀):

if __name__ == '__main__':
    page = 5   #page表示爬取笑话内容的html网页的页数,此为5页
    url_list = []    #存放5页的url链接
    #通过观察每一页的url链接的特点,通过for循环将每一页的url链接存入url_list列表中备用
    for i in range(1,page+1):
        i = str(i)
        url = 'https://www.qiushibaike.com/hot/page/' + i + '/'
        url_list.append(url)
    list = getJokeText(url_list)   #解析每一个网页源代码,获得未经处理的笑话内容,列表形式返回
    text_list = subText(list)    #处理内容,将
换行符剔除
saveText(text_list) #保存到本地指定.txt文本文档中

3.具体解析每一个方法的实现:

(1)获取网页的源码:

#获取网页的源码
def getHTMLText(url):
    try:
        hd = {'user-agent':'chorme/10'}
        r = requests.get(url,headers = hd)
        r.raise_for_status()
        #r.encoding = r.apparent_encoding
        return r.text
    except:
        return ''

这个代码可以作为一个爬取网页源码的通用框架来使用,需要注意的是此处未使用从爬取网页解析出的编码方式,及r.apparent_encoding返回的结果,因为requests请求返回的头部信息中就有编码方式gbk,不试用此会出现乱码的情况,兄弟们可以自己试一试哟。

(2)解析每一个网页源代码,获得未经处理的笑话内容,列表形式返回:

在写代码前先观察下目标内容的所在的标签位置(F12直接查看源码):

很容易就看出其中的特点,上代码!

#解析网页
def getJokeText(url_list):
    a = []  #存放未经处理的爬取到的笑话内容
    for i in url_list:
        soup = BeautifulSoup(getHTMLText(i),'html.parser')
        #通过soup.find_all方法,设置其中的属性直接找到存放内容的标签的父亲标签
for j in soup.find_all('div', attrs={'class': 'content'}): text = re.findall(r'(.*?)', str(j), re.S) #正则表达式一行代码爬取内容 a.append(text) #添加进a列表中 return a

此时已经将内容爬取到,但其中包含很多换行符标签,在网页源代码截屏处也可以看到

注意re.findall()中设置标志r.S是表明包含换行符在内的所有内容,若不设置的话会返回空的呢,可以自己试一试其中的区别。

(3)处理内容,将换行符剔除:

def subText(list):
    text_list = []   #存放处理好的内容
    for list in list:
        for text in list:
            tds = re.sub(r'', '', text, re.S)      #用正则表达式将内容中的
找到替换为空字符串
text_list.append(tds) return text_list

(4)保存到本地指定.txt文本文档中:

def saveText(text_list):
    path = 'jok.txt'
    with open(path, 'w', encoding='utf-8') as f:
        for i in text_list:
            # i.encode("utf-8")
            f.write(i)

注意在打开文件时必须指定编码方式,否则会保存不进去的哟,你可以试一试二者的不同

(5)出结果!上图!

是不是很简单呀,总结以下自己在写代码时的新的体会,当抓取多个页面的具有相同格式的内容时,建议先从一页开始,当一页成功的时候,多页内容直接for循环就完全ojbk了

本文地址:https://www.yimics.com/wljs/43586.html

发布于 2024-07-15 17:07:30
收藏
分享
海报
31
上一篇:聊一聊游戏中的内购 下一篇:内购是不是一个好生意:运营管理篇

推荐阅读

0 条评论

本站已关闭游客评论,请登录或者注册后再评论吧~

忘记密码?

图形验证码