爬虫练习一(爬取笑话集)

爬取笑话集网页

目标网址为:http://www.jokeji.cn/list.html 

感觉这个网站挺简单,不用登陆,没有复杂的功能,好爬~

可以现在浏览器中访问这个链接看一下效果,你会发现这个页面是个目录,有很多笑话页面的链接。

还是先使用简单的代码试试有没有效果:

由于爬取的内容发现乱码,所以加上encoding

import requests         # 导入requests库
jokePage = requests.get('http://www.jokeji.cn/list.htm')
jokePage.encoding = 'gbk'
print(jokePage.text)

爬取每个笑话页面的连接

刚刚我们爬的那个页面,是所有笑话的目录,每个目录是一个链接,打开链接才能看到笑话的内容,所以我们要从刚刚爬取的页面中,提取所有的笑话页面链接。

* 网页就是文本,我们要从一个网页中爬取我们想要的内容,就是处理字符串 *。所以,分析刚刚爬取的页面,找到其中所有的笑话页面链接地址。

可以简单的认为,一个笑话页面的链接,都是如下结构的:/jokehtml/***/****.htm",不信你可以去刚刚爬到的网页源码里面看看! 
知道了笑话页面链接的结构,就可以从网页源码里把所有的链接提取出来啦,当然,要使用正则表达式! 

import requests         # 导入requests库
import re               # 导入正则表达式库
jokePage = requests.get('http://www.jokeji.cn/list.htm')
jokePage.encoding = 'gbk'
jokeList = re.findall('/jokehtml/[\w]+/[0-9]+.htm',jokePage.text)   # 使用正则表达式找到所有笑话页面的链接
print(jokeList)

利用爬到的笑话网页链接去访问笑话页面

简单点,先访问我们获取到的第一个链接,既 http://www.jokeji.cn + jokeList[0] 这个页面,访问的方法一样是用requests.get()方法,代码如下:

import requests         # 导入requests库
import re               # 导入正则表达式库
jokePage = requests.get('http://www.jokeji.cn/list.htm')
jokePage.encoding = 'gbk'
jokeList = re.findall('/jokehtml/[\w]+/[0-9]+.htm',jokePage.text)   # 使用正则表达式找到所有笑话页面的链接
jokeContent = requests.get('http://www.jokeji.cn/'+jokeList[1])     # 访问第一个链接
jokeContent.encoding = 'gbk'
print(jokeContent.text)

           比如我就发现,所有的笑话都在<p></p>标签中,而且<p>后面都跟了一个数字代表这个笑话的序号,而其他非笑话的 <p>标签后就没有数字,所以可以用'<p>[0-9].*</p>'这个简单的正则匹配到所有笑话!,把上面代码修改最后两句:

import requests         # 导入requests库
import re               # 导入正则表达式库
jokePage = requests.get('http://www.jokeji.cn/list.htm')
jokePage.encoding = 'gbk'
jokeList = re.findall('/jokehtml/[\w]+/[0-9]+.htm',jokePage.text)   # 使用正则表达式找到所有笑话页面的链接
jokeContent = requests.get('http://www.jokeji.cn/'+jokeList[0])     # 访问第一个链接
jokeContent.encoding = 'gbk'
jokes = re.findall('<P>[0-9].*</P>', jokeContent.text)      # 利用正则找到页面中的所有笑话
print(jokes)

完整代码如下:

import requests
import re
jokePage = requests.get('http://www.jokeji.cn/list.htm')   #取到笑话集完整网址
jokePage.encoding = 'gbk'
# print(jokePage.text)  #打印html页面
jokeList = re.findall('/jokehtml/[\w]+/[0-9]+.htm',jokePage.text)   #匹配到所有的链接
print(jokeList)
for jokeLink in jokeList:  #取到每一个链接jokeContent = requests.get('http://www.jokeji.cn/' + jokeLink)      # 访问第一个链接jokeContent.encoding = 'gbk'jokes = re.findall('<P>[0-9].*</P>', jokeContent.text)for joke in jokes:          # 循环打印笑话print(joke)print()

    最后还是别忘了,这篇文章主要目的是练习使用requests库,别只顾看笑话了,想想爬笑话过程中用到了requests的什么功能。实际上学会了用代码去访问网页!

转载于:https://www.cnblogs.com/moning/p/8299037.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/368177.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Huffman树学习

一篇很好的博客 转载于:https://www.cnblogs.com/cjoierljl/p/9319902.html

JAVA第六章第6题,java第六章例题源代码

《JavaWeb 程序设计》 练习题参考答案 第一章:Servlet 基础 1、下列选项中属于...由于 PHP 开放源 代码,并且是免费的,所以非常流行,是当今 Internet 上最为火热......JAVA 编程实例大全及详解答案(50 例) 【程序 1】题目:古典问题:有一对...9、Java 中一个字符占用两个 字节,所…

GlassFish 4带来了Java EE 7

真是惊喜 除了推出新的iOS 7外&#xff0c;苹果在wwdc上什么也没提供。 碰巧的是&#xff0c;在他们的主题演讲后不久&#xff0c;又有7个人正式露面。 GlassFish 4.0已于昨天晚上发布&#xff08;显然是不需要的&#xff09;。 新的Java EE 7参考实现自动成为当今第一个可用的…

bootstrap的栅格布局与两列布局结合使用

在工作中我们常常需要实现响应式布局&#xff0c;这个可以使用bootstrap的栅格系统来实现&#xff0c;我们在列里也需要实现一部分的响应式。比如下面的效果图&#xff0c;需要实现左边图标固定&#xff0c;右边的自适应 &#xff1a; 左边固定宽度&#xff0c;右边自适应&…

软件测试初学记录——第一章

阅读软件测试记要 什么是软件测试&#xff1a; 以找出软件中不符合需求而去操作软件的过程称为软件测试。 软件测试员的工作&#xff1a; 软件测试员的目标是尽早的发现软件缺陷&#xff0c;并确保其被修复。 软件缺陷是什么&#xff1a; 不符合需求文档或导致软件不能正常运行…

matlab命令 脑电波,基于Matlab的脑电波信号处理

做脑电波信号处理滴嘿嘿。。Matlab addictedCodes%FEATURE EXTRACTERfunction [features] EEGfeaturetrainmod(filename,m)a 4;b 7;d 12;e 30;signals 0;for index 1:9; % read in the first ten EEG data because the files are numbered as ha11test01 rather than ha…

JavaScript内置对象Date常用函数

// //获取当前时间// var dt new Date();// alert(dt);// //传入时间// var dt1 new Date("2017-08-12");// alert(dt1);//// //获取时间的对象(毫秒)// var dt2 Date.now();// alert(dt2);//// …

JVM性能魔术技巧

HotSpot是我们众所周知和喜爱的JVM&#xff0c;是Java和Scala汁流淌的大脑。 多年来&#xff0c;许多工程师对其进行了改进和调整&#xff0c;并且在每次迭代中&#xff0c;其代码执行的速度和效率都接近本机编译代码。 JIT&#xff08;“即时”&#xff09;编译器是其核心。…

移动端1px

移动端不同尺寸设备dpi不同&#xff0c;会造成1px线条不同程度的缩放&#xff0c;可利用媒体查询device-pixel-ratio&#xff0c;进行不同情况匹配&#xff1a; media&#xff08;-webkit-min-device-pixel-ratio:1.5&#xff09;,(min-device-pixel-ratio:1.5){//dpi:1.5 .bo…

mysql 10个日期,MySQL自学篇(10)——日期函数

MySQL自学篇(十)——日期函数日期和时间函数(1)获取当前日期的函数和时间的函数CURDATE()和CURRENT_DATE()函数&#xff0c;获取当前日期select current_date(),curdate(),curdate()0;curdate()0 表示将当前时间转化为数值型CURTIME()和CURRENT_TIME()获取当前时间select cur…

python-flask-请求源码流程

启动先执行manage.py 中的 app.run() class Flask(_PackageBoundObject):   def run(self, hostNone, portNone, debugNone, **options):from werkzeug.serving import run_simpletry:#run_simple 是werkzeug 提供的方法&#xff0c;会执行第三个参数 self()run_simple(ho…

正则表达式强化,爬虫练习

re模块下的常用方法 import re ret re.findall(\d(\.\d)?, 1.232.34)   print(ret) 结果&#xff1a; [.23,.34] # findall的正则表达式里面有分组(),()里面的内容优先显示 ret re.findall(\d(?:\.\d)?, 1.232.34)print(ret)    结果&#xff1a;…

Java垃圾回收(3)

这是我之前的两个垃圾收集博客文章中的内容&#xff1a; 热点GC概述 。 并行垃圾收集器 。 并发标记扫描 Hotspot中的并行垃圾收集器旨在最大程度地减少应用程序进行垃圾收集所花费的时间&#xff0c;这称为吞吐量 。 对于所有应用程序来说&#xff0c;这并不是一个适当的权…

display转块状化

display:block block元素会独占一行&#xff0c;多个block元素会各自新起一行。默认情况下&#xff0c;block元素宽度自动填满其父元素宽度。 block元素可以设置width,height属性。块级元素即使设置了宽度,仍然是独占一行。 block元素可以设置margin和padding属性。 display:in…

php论坛思路,PHP论坛实现积分系统的思路代码详解

PHP论坛实现积分系统的思路代码详解,积分,头像,等级,用户,字段PHP论坛实现积分系统的思路代码详解易采站长站&#xff0c;站长之家为您整理了PHP论坛实现积分系统的思路代码详解的相关内容。首先在用户表定义一个积分字段&#xff1b;然后创建一个等级表&#xff0c;主要字段有…

Spring MVC:会话高级

不久前&#xff0c;我写了一篇关于Spring MVC应用程序中HTTP会话的文章。 那是简单的文章&#xff0c;着重于用法的实际方面。 在文章的最后&#xff0c;我保证会写一些更高级的主题&#xff0c;专门针对Spring MVC应用程序中的会话。 因此&#xff0c;我将发布这些东西。 在开…

Linux LVM管理

LVM(Logical Volume Manager)逻辑卷管理是在Linux2.4内核以上实现的磁盘管理技术。它是Linux环境下对磁盘分区进行管理的一种机制。 本文内容&#xff1a; 创建和管理LVM扩容LVM分区一、创建和管理LVM 要创建一个LVM系统&#xff0c;一般需要经过以下步骤&#xff1a; 1、 创建…

USB OTG插入检测识别

一 USB引脚一般四根线&#xff0c;定义如下&#xff1a; 为支持OTG功能&#xff0c;mini/micro usb接口扩展了一个ID引脚&#xff08;第4脚&#xff09; A设备端ID脚接地&#xff0c;则初始状态为Host&#xff0c;例如PC和支持OTG设备做主设备时 B设备端ID脚悬空&#xff0c;默…

CSS3与页面布局学习笔记(三)——BFC、定位、浮动、7种垂直居中方法

一、BFC与IFC 1.1、BFC与IFC概要 BFC&#xff08;Block Formatting Context&#xff09;即“块级格式化上下文”&#xff0c; IFC&#xff08;Inline Formatting Context&#xff09;即行内格式化上下文。常规流&#xff08;也称标准流、普通流&#xff09;是一个文档在被显示…

matlab空间截面回归,截面空间回归模型操作应用手册

原标题&#xff1a;截面空间回归模型操作应用手册SAR模型数据集包含对地理区域或其他单元的观测;所以需要的是有一些距离的度量标准来区分哪些单位彼此之间比较近。spregress命令对横断面数据进行建模。它要求每一个观察都代表一个独特的空间单元。对于每个单元(即面板数据)有多…