爬取糗事百科的段子

把糗事百科的段子信息爬取下来保存在txt文件内,内容有

用户名:

年龄:

好笑指数:

评论数:

段子内容:

借助火狐浏览器可以方便的查看网页源代码以及审查元素,便于爬取内容

此爬取的知识点:正则表达式

其实正则表达式是爬取代码的核心,熟练掌握是爬取普通网页的关键

一下是正则表达式的一些关键用法:

爬取糗事百科的段子

# coding: utf-8
# 网页请求包
import requests
# 正则表达式包
import re

# 1.准备url
url = 'https://www.qiushibaike.com/hot/'
# 2.发起请求,拿回源代码
response = requests.get(url)
# 取出html源代码
html = response.content

# ps:需要从html中根据正则匹配到总页数,转换为整数
pattern1 = re.compile(r'class="dots.*?<span.*?>(.*?)</span>', re.S)
rs = re.search(pattern1 ,html)
# group(index)根据分组索引 查找内容
total_page = rs.group(1)
total_page = total_page.strip('\n')
total_page = int(total_page)
print '共%s页段子内容!'%total_page
# ****************1.打开文件
file_handle = open('qsbk.txt','w')

# for 循环获取每一页的html源代码x
for x in range(1,total_page+1):
    print '正在爬取第%s页段子....'%x
    url = 'https://www.qiushibaike.com/hot/page/%s/'%x
    html = requests.get(url).content
# 根据正则匹配每一页的段子内容
    # 3.准备正则
    # re.S DOTALL模式 .可以用来匹配所有的任意字符
    pattern = re.compile(r'<div class=".*?qiushi_tag.*?<h2>(.*?)</h2>.*?<div class="articleGender.*?>(.*?)</div>.*?<span>(.*?)</span>.*?<i class="n.*?>(.*?)</i>.*?<i.*?>(.*?)</i>', re.S)
    # 4.查找所有的符合规则的数据
    rs = re.findall(pattern ,html)
    # 写入每页的分割线
    file_handle.write('=================第%s页===============\n'%x)
    for detail in rs:
        # 取出数据
        name = detail[0]
        # strip函数()去除字符串中的某些字符
        name = name.strip('\n')
        age = detail[1]
        content = detail[2]
        content = content.strip('\n')
        # 准备正则
        pattern1 = re.compile(r'<br/>')
        # 使用sub函数做替换
        content = re.sub(pattern1 ,'\n', content)
        vote_number = detail[3]
        comment_number = detail[4]
        # 写入的段子第一行 用户信息
        s1 = '用户名:%s    年龄:%s\n'%(name, age)
        file_handle.write(s1)
        # 写入的段子第二行 段子评论数 好笑数
        s2 = '好笑数:%s    评论数:%s\n'%(vote_number, comment_number)
        file_handle.write(s2)
        # 写入段子内容
        file_handle.write(content)
        file_handle.write('\n\n')
# 3.关闭文件
file_handle.close()
print '数据写入成功!'