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

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)    #处理内容,将<br/>换行符剔除
    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方法,设置其中的属性直接找到存放内容的标签<span>的父亲标签<div class="context">
        for j in soup.find_all('div', attrs={'class': 'content'}):
            text = re.findall(r'<span>(.*?)</span>', 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'<br\/>', '', text, re.S)      #用正则表达式将内容中的<br/>找到替换为空字符串
            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了

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
你好!对于爬取动态加载的页面,可以使用 Selenium 库来模拟浏览器的操作。以下是一个简单的示例,展示了如何使用 Selenium 进行动态页面的爬取: 首先,确保已安装 Selenium 库: ``` pip install selenium ``` 然后,根据你使用的浏览器,下载对应的 WebDriver。比如,如果你使用的是 Chrome 浏览器,可以前往 Chrome WebDriver 官网(https://sites.google.com/a/chromium.org/chromedriver/)下载对应版本的 WebDriver。 接下来,编写 Python 代码: ```python from selenium import webdriver # 声明并初始化一个 WebDriver 对象 # 这里以 Chrome 浏览器为例,需要指定 Chrome WebDriver 的路径 driver = webdriver.Chrome('/path/to/chromedriver') # 访问目标网页 driver.get('https://example.com') # 执行一些操作,模拟用户交互 # ... # 获取页面源代码,包含动态加载的内容 html = driver.page_source # 关闭 WebDriver driver.quit() # 处理获取到的页面源代码 # ... ``` 在代码中,首先创建了一个 WebDriver 对象,并指定了 WebDriver 的路径。然后使用 `get()` 方法访问目标网页。 接下来,你可以执行一些模拟用户交互的操作,例如点击按钮、填写表单等等,以加载动态内容。 最后,使用 `page_source` 属性获取页面的源代码,其中包含了动态加载的内容。你可以根据需要对获取到的源代码进行处理,提取出你感兴趣的信息。 最后别忘了关闭 WebDriver,以释放资源。 希望这个示例能够帮助你入门动态页面的爬取!如果有更多问题,欢迎继续提问。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值