'''
爬取内涵吧段子所有笑话(带标题,作者)
总结:解码上,使用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. 人眼对led灯的闪烁识别度:写单片机的时候,小于15ms,我们人眼视为常亮

    人眼对于每11毫秒闪烁一次约83赫兹基本感觉不到,每15毫秒闪烁一次约66赫兹轻微频闪. 所以写单片机的时候,小于15ms,我们人眼视为常亮

  2. Python全栈学习笔记---问题总结(五)

    一.全局变量和局部变量 在函数内声明全局变量:globle 二.数值型lis和字符型list转换 数值型list转字符型list 3.x: array = [1, 2, 3, 4, 5,6 ] arr ...

  3. PHP二维数组根据某个元素(key)排序

    /** * 二维数组根据key排序 * @param $arr * @param $arr_key * @param string $order 排序规则 * @return mixed */ fun ...

  4. 「DIARY」NOI2021 小结

    这篇就主要说一下个人感悟吧,虽然不是金牌选手,但还是希望多多少少能对后来者提供些帮助 1. 预备 省选到 NOI 的准备,就当讲讲故事. 省选考下来好像不是很行,本来退役记都写了一半了,结果发现省队最 ...

  5. mybatis判断是否为空或null

    <if test="catagoryCode != null and catagoryCode != ''"> AND train.CATAGORY_CODE = #{ ...

  6. WIN10操作系统如何利用无线网卡连接wifi再通过有线网卡共享网络给路由(双网卡)

    首先有一台笔记本电脑,或者双网卡的电脑(wifi网卡 和 有线网卡) 找到两个个网卡,并重置他们的设置 然后同时选中,右单击选择桥接 桥接成功以后就可以用无线网卡连接wifi,然后把有线网口插上网线直 ...

  7. Winform窗体中打开PDF文件的三种方式

    来源:https://www.jb51.net/article/251451.htm

  8. eNSP报错41解决方法

    1.点击右上角的菜单 2.工具>>注册设备,全部勾选,然后注册,就行了.

  9. es 集群并设置密码

    1. 生成证书 bin/elasticsearch-certutil cert -out config/elastic-certificates.p12 -pass ""2. el ...

  10. 解决 ant design vue Carousel 图片不能点击的问题

    pointer-events: none 的作用如下: // 阻止用户的点击动作产生任何效果 // 阻止缺省鼠标指针的显示 // 阻止CSS里的hover和active状态的变化触发事件 // 阻止J ...