'''
爬取内涵吧段子所有笑话(带标题,作者)
总结:解码上,使用gbk2312编码的,我们可以采取gbk解码。 不会报错
'''

from fake_useragent import FakeUserAgent
import requests
import chardet
import re
from lxml import etree
import os
import time
# 定义一个url
def neiHan():
num=1
base_url = 'https://www.neihanba.com/dz/'
while True:
base_headers = {
'User-Agent':FakeUserAgent().random
}
base_bytesHtml = requests.get(url=base_url,headers=base_headers).content
# print(base_bytesHtml)
# 判断网页编码格式 返回一个列表
result = chardet.detect(base_bytesHtml)
# print(result)
# 解码 原网站使用的 是gbk2312编码。 我们碰到诸如此类的可以使用,gbk解码。
# 有兴趣的同学可以自行百度两者的关系
base_html = base_bytesHtml.decode('gbk')
# print(base_html)

# 构造树状图
base_html=etree.HTML(base_html)
# 使用xpath提取url列表
urls = base_html.xpath('/html/body/div[1]/div/div[1]/ul/li[*]/h4/a/@href')
# print(urls)
for url in urls:
# print(url)
url = 'https://www.neihanba.com'+url
headers = {
'User-Agent':FakeUserAgent().random
}
# 请求网页
bytesHtml=requests.get(url,headers=headers).content
# 解码
html=bytesHtml.decode('gbk')
# print(html)
# 提取内容(标题) 使用正则
# 定义正则表达式(url)
title = r'<h1>(.*?)</h1>'
# 编译
title = re.compile(title,re.S)
# 正则提取标题
title = re.findall(title,html)
print(title)
# 定义正则提取内容
detail = r'<p>(.*?)</p>'
# 编译
detail = re.compile(detail,re.S)
# 进行提取
detail = re.findall(detail,html)
# # 处理字符串,去掉多余的空格,替换&rdquo为右引号。使用正则sub方法
# detail = re.sub('&ldquo','"',detail[0])
# 处理字符串使用replace方法
detail_list = []
detail=detail[0].replace('&ldquo','"').replace('&rdquo','"').strip()
detail_list.append(detail)
# print(detail)
# print(detail_list)

# 保存成txt文本
dir = os.makedirs("./neibanba")
with open(dir+title[0].txt,'w',encoding='utf-8') as f:
f.write(detail)
# 设置延时
time.sleep(1.5)
# 判断是否有下一页,如果没有循环停止,使用的是尾页判断。
res=base_html.find('<a href="/dz/list_100.html">尾页</a>')
# 如果没有
if res == -1:
break
num+=1
# print(num)
base_url = 'https://www.neihanba.com/dz/list_{}.html'.format(num)

if __name__ == '__main__':
neiHan()

spider_爬取内涵吧的段子(二级深度爬取)的更多相关文章

  1. Python爬虫实战三之爬取嗅事百科段子

    一.前言 俗话说,上班时间是公司的,下班了时间才是自己的.搞点事情,写个爬虫程序,每天定期爬取点段子,看着自己爬的段子,也是一种乐趣. 二.Python爬取嗅事百科段子 1.确定爬取的目标网页 首先我 ...

  2. scrapy基于请求传参实现深度爬取

    请求传参实现深度爬取 请求传参: 实现深度爬取:爬取多个层级对应的页面数据 使用场景:爬取的数据没有在同一张页面中 在手动请求的时候传递item:yield scrapy.Request(url,ca ...

  3. Python爬虫之利用正则表达式爬取内涵吧

    首先,我们来看一下,爬虫前基本的知识点概括 一. match()方法: 这个方法会从字符串的开头去匹配(也可以指定开始的位置),如果在开始没有找到,立即返回None,匹配到一个结果,就不再匹配. 我们 ...

  4. Python爬虫-爬取糗事百科段子

    闲来无事,学学python爬虫. 在正式学爬虫前,简单学习了下HTML和CSS,了解了网页的基本结构后,更加快速入门. 1.获取糗事百科url http://www.qiushibaike.com/h ...

  5. python学习(十六)写爬虫爬取糗事百科段子

    原文链接:爬取糗事百科段子 利用前面学到的文件.正则表达式.urllib的知识,综合运用,爬取糗事百科的段子先用urllib库获取糗事百科热帖第一页的数据.并打开文件进行保存,正好可以熟悉一下之前学过 ...

  6. Python爬虫实战一之爬取糗事百科段子

    大家好,前面入门已经说了那么多基础知识了,下面我们做几个实战项目来挑战一下吧.那么这次为大家带来,Python爬取糗事百科的小段子的例子. 首先,糗事百科大家都听说过吧?糗友们发的搞笑的段子一抓一大把 ...

  7. 转 Python爬虫实战一之爬取糗事百科段子

    静觅 » Python爬虫实战一之爬取糗事百科段子 首先,糗事百科大家都听说过吧?糗友们发的搞笑的段子一抓一大把,这次我们尝试一下用爬虫把他们抓取下来. 友情提示 糗事百科在前一段时间进行了改版,导致 ...

  8. Python爬虫爬取糗事百科段子内容

    参照网上的教程再做修改,抓取糗事百科段子(去除图片),详情见下面源码: #coding=utf-8#!/usr/bin/pythonimport urllibimport urllib2import ...

  9. Python爬上不得姐 并将段子写入数据库

    #Python2.7 可以优化一下 前10页 每页点赞最多的段子 百思不得姐 # -*- coding: utf-8 -*-import MySQLdbimport urllib,urllib2imp ...

  10. 深度爬取之rules

    深度爬取之rules CrawlSpider使用rules来决定爬虫的爬取规则,并将匹配后的url请求提交给引擎.所以在正常情况下,CrawlSpider不需要单独手动返回请求了. 在rules中包含 ...

随机推荐

  1. 关于Java中数组的简单使用

    关于java中数组的简单使用--继java环境配置后的第二篇学习笔记 近期在学习Java的过程中学到了数组的部分,至于为什么我会到数组才来写这个,主要是数组这一章节的内容感觉还是与之前学的C里面的数组 ...

  2. Java笔记_this关键字_HomeWork(5 - 9 题)

    第五题 /** * @ClassName HomeWork05 * @Description TODO * @Author Orange * @Date 2021/4/25 10:09 * @Vers ...

  3. linux安装oracle客户端

    下载客户端软件 客户端下载地址 链接:https://pan.baidu.com/s/1StXjSjQ_6wRuwj4tewRlaA 提取码:8ynu sqlldr工具 链接:https://pan. ...

  4. ajv参数验证

    1.验证枚举类型 var schema = { "properties": { "data": { "type": "object ...

  5. Android Studio Gradle 输出信息乱码

    Android Studio Gradle 输出信息出现乱码 如下: > Task :app:compileDebugJavaWithJavacע: ijЩ�����ļ�ʹ�û����ѹ�ʱ�� ...

  6. MQTT 客户端出现连接订阅等问题时如何排查?

    大家好,这是一期社区专题 FAQ.我们整理了近期社区中关注度较高的问题,在这里进行统一汇总解答. 今后本系列内容将不定期推送,敬请关注. 同时,如果大家在使用 EMQX 的过程中遇到问题,欢迎通过以下 ...

  7. 解决问题mount.nfs: Stale file handle

    原因出现在,机器1挂载了机器2的一个盘,然后机器2重启了,然后机器1变成没有响应的状态,然后卸载了机器1的对于这个盘的挂载,然后就一直挂不上,提示mount.nfs: Stale file handl ...

  8. JS——如果数组中的信息存在多个相同的属性,那么则将这些相同的信息放到同一个children中。

    var arr = [ {name: '张三', age: 10, sex: '男'}, {name: '李四', age: 10, sex: '男'}, {name: '钱五', age: 11, ...

  9. 向mysql插入数据是出现Incorrect string value错误

    在向Mysql中添加中文数据时,报错(incorrect string value ) 字符转换不正确 插入语句:mysql>  insert into user1 (name,password ...

  10. C# 在GridView里面使用a标签下载文件(图片)

    不能使用ajax进行下载文件的操作,具体原因需百度 前端页面,在GridView里面使用模板列,模板列放a标签 <cimesui:cimesGridView ID="GridView1 ...