笑话大全爬虫实战笔记[xiaohua.zol.com.cn]

免责声明:本文所记录的技术手段及实现过程,仅作为爬虫技术学习使用,不对任何人完全或部分地依据本文的全部或部分内容从事的任何事情和因其任何作为或不作为造成的后果承担任何责任。

爬取需求:通过百度搜索关键字:笑话,搜索结果的第一项就是【xiaohua.zol.com.cn】,锁定从该站上爬取最新的笑话信息,爬取前5页笑话标题、内容等信息;

image.png

爬取工具:chrome浏览器、pycharm

Python库:requests、BeautifulSoup

01 网站结构分析

通过输入url【xiaohua.zol.com.cn】,打开笑话大全网站,点击【最新笑话按钮】,打开最新笑话页面:

image.png

通过翻页按钮,找到每页对应的url链接信息:
xiaohua.zol.com.cn/new/1.html
xiaohua.zol.com.cn/new/2.html
xiaohua.zol.com.cn/new/3.html

通过在【查看全文】按钮上右键,选择【检查】,找到笑话详情url提取信息:

image.png

image.png

通过上述页面分析,【article-list】是列表,包括了所有的笑话信息【article-summary】,每个笑话信息里面,可以从【article-title】或者【article-commentbar articleCommentbar clearfix】拿到笑话详情页面url。

02 爬取笑话大全详情页URL

根据上面分析的网站结构,开始创建python工程并编写代码:

import requests
from bs4 import BeautifulSoup

# 模拟浏览器请求头
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.114 Safari/537.36'
}

xiao_hua_url = 'https://xiaohua.zol.com.cn/new/{}.html'

def start_xiao_hua(pages):
    # 从第一页开始,爬取到指定页
    for page in range(1, pages):
        # 访问url
        main_html = requests.get(xiao_hua_url.format(page), headers=headers)
        o_soup = BeautifulSoup(main_html.text, 'html.parser')
        v_xiao_hua_list = o_soup.select('.article-summary')
        for v_xiao_hua_item in v_xiao_hua_list:
            # 通过标题获取笑话详情的url
            v_xiao_hua_url = v_xiao_hua_item.select('.article-title a')[0]['href']
            print(v_xiao_hua_url)

start_xiao_hua(5)
复制代码

运行代码,结果如下:

image.png

已经拿到了笑话详情的url,但是为相对路径,需要拼接主url

v_xiao_hua_url = 'https://xiaohua.zol.com.cn' + v_xiao_hua_url
复制代码

运行代码,结果如下:

image.png

笑话详情url爬取成功!

03 爬取笑话详情页标题

继续编写代码,打开详情页的url,在打开的详情页提取笑话的标题

def detial_page(url):
    # 访问详情页url
    detial_html = requests.get(url, headers=headers)
    detial_soup = BeautifulSoup(detial_html.text, 'html.parser')
复制代码

分析详情页,笑话标题定位信息为:article-title

image.png

编写代码解析标题:

v_title = detial_soup.select('.article-title')[0].text
print(v_title)
复制代码

运行代码,结果如下:

image.png

笑话标题爬取成功!

04 爬取笑话详情页内容

分析笑话详情页的内容,内容信息的关键定位信息为:article-text

image.png

编写代码,提取笑话内容信息

v_content_list = detial_soup.select('.article-text p')
v_content = ''
for v_content_item in v_content_list:
    v_content = v_content + v_content_item.text
print(v_title, v_content)
复制代码

运行代码,结果如下:

image.png

爬取笑话内容信息成功!

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享