原文链接:爬取糗事百科段子

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

from urllib import request, parse
from urllib import error
page = 1
url = 'https://www.qiushibaike.com/hot/page/'+str(page)
user_agent = 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.221 Safari/537.36 SE 2.X MetaSr 1.0'
try:
req = request.Request(url)
req.add_header('User-Agent', user_agent)
response = request.urlopen(req)
#bytes变为字符串
content = response.read().decode('utf-8')
print(type(content))
#uf-8编码方式打开
file = open('file.txt', 'w',encoding='utf-8') file.write(content) except error.URLError as e:
if hasattr(e,'code'):
print (e.code)
if hasattr(e,'reason'):
print (e.reason)
finally:
file.close()

下面要用到学过的正则表达式的知识,过滤掉没有用的信息,只获取评论数,作者,正文,以及点赞的数量。打开文件可以看到如下内容:

div class=”article block untagged mb15 typs_long” id=’qiushi_tag_119848276’表示一个文章的开始,id为文章对应的id,
h2 之间的是发布者的姓名‘高老庄福帅猪刚鬣’,span与/span之间的是正文, i class=”number”与/i,635表示赞的个数,
同样也可以获取评论的个数。

import re

with open('file.txt','r', encoding='utf-8') as f:
data = f.read() pattern = re.compile(r'<div.*?<h2>(.*?)</h2>.*?<span>(.*?)</span>.*?number">(.*?)</i>.*?'+
r'"number">(.*?)</i>', re.S )
result = re.search(pattern, data)
#print(result)
#print(result.group())
print(result.group(1))
print(result.group(2))
print(result.group(3))
print(result.group(4))

re.compile(),参数re.S表示将.的作用扩充为任意字符,因为前几篇文章讲述过.在一般情况下匹配除/n之外的所有字符。
正则表达式中.*?连起来匹配任意字符,且为非贪婪模式。因为.表示任意字符,*表示匹配前一个字符0个或多个,
.*表示匹配任意多个字符,而加上?表示非贪婪模式。
re.search是搜索匹配正则表达式规则的条目,search讲述过可以从内容的任意位置查找。这样就可以找到一个符合这种规则
的段子。如果找到所有符合规则的段子可以用re.findall进行查找。

下面一气呵成,将网站上的段子按照正则表达式匹配,并将匹配后的段子写入文件,同时在终端显示。

from urllib import request, parse
from urllib import error
page = 1
url = 'https://www.qiushibaike.com/hot/page/'+str(page)
user_agent = 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.221 Safari/537.36 SE 2.X MetaSr 1.0'
try:
req = request.Request(url)
req.add_header('User-Agent', user_agent)
response = request.urlopen(req)
#bytes变为字符串
content = response.read().decode('utf-8')
pattern = re.compile(r'<div.*?<h2>(.*?)</h2>.*?<span>(.*?)</span>.*?number">(.*?)</i>.*?'+
r'"number">(.*?)</i>', re.S )
result = re.findall(pattern, content)
files = open('findfile.txt','w+', encoding='utf-8')
for item in result:
author = item[0]
contant = item[1]
vote = '赞:'+item[2]
commit = '评论数:'+item[3]
infos = vote +' '+commit+' '+'\n\n'
print(author)
print(contant)
print(infos)
files.write(author)
files.write(contant)
files.write(infos) except error.URLError as e:
if hasattr(e,'code'):
print (e.code)
if hasattr(e,'reason'):
print (e.reason)
finally:
files.close()

效果如下:

我的公众号:

python学习(十六)写爬虫爬取糗事百科段子的更多相关文章

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

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

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

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

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

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

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

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

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

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

  6. [爬虫]用python的requests模块爬取糗事百科段子

    虽然Python的标准库中 urllib2 模块已经包含了平常我们使用的大多数功能,但是它的 API 使用起来让人感觉不太好,而 Requests 自称 “HTTP for Humans”,说明使用更 ...

  7. python爬取糗事百科段子

    初步爬取糗事百科第一页段子(发布人,发布内容,好笑数和评论数) #-*-coding:utf--*- import urllib import urllib2 import re page = url ...

  8. Python爬虫实战之爬取糗事百科段子【华为云技术分享】

    首先,糗事百科大家都听说过吧?糗友们发的搞笑的段子一抓一大把,这次我们尝试一下用爬虫把他们抓取下来. 友情提示 糗事百科在前一段时间进行了改版,导致之前的代码没法用了,会导致无法输出和CPU占用过高的 ...

  9. 芝麻HTTP:Python爬虫实战之爬取糗事百科段子

    首先,糗事百科大家都听说过吧?糗友们发的搞笑的段子一抓一大把,这次我们尝试一下用爬虫把他们抓取下来. 友情提示 糗事百科在前一段时间进行了改版,导致之前的代码没法用了,会导致无法输出和CPU占用过高的 ...

随机推荐

  1. Teaching Machines to Understand Us 让机器理解我们 之一 引言

    Teaching Machines to Understand Us   By Tom Simonite  MIT Technology Review Vol.118 No.5 2015 让机器理解我 ...

  2. 技本功丨利用 Atomic 构建 React 项目工作流,so easy!

    近日刷微博,#2018年结婚率创新低#荣登热门话题NO.1,沪浙最不积极. 生活压力越大,缺爱的人也越来越多...据本萌的不完全观察,程序猿虽然是压力加成的职业,在袋鼠云还是有不少早早脱了单.至于,脱 ...

  3. sqlmap+tor解决ip黑名单限制

    1.安装tor浏览器(8.0.8)并配置好 旧版tor是需要Vidalia配合的,新版貌似集成了?还是怎样的,反正不需要了 2.启动tor浏览器 3.启动sqlmap python sqlmap.py ...

  4. windows64系统下安装 redis服务 (详细)

    Linux下Redis安装链接 :     转到 redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表) ...

  5. 从无到有之webpack+vuerouter的简单例子以及各个属性解释

    之前一直没玩过webpack和vue,近两周才看这玩意,本文纯属自己的实验+之前angular作战经验的理解一些入门文章 首先webpack关于vue以及各个包 module.exports = { ...

  6. 在PHP中,是以分好结束一条语句的吗

    在PHP中,是以分号结束一条语句的,这个和C语言类似. 但是,有一条例外,对于PHP结束tag之前的语句,是可以不写分号的: <?php if ($a == $b) { echo "R ...

  7. Swift-属性监听

    监听属性的改变(开发中使用很多) oc中长是重写set方法 swift通过属性监听器 class Dog: NSObject { var name:String?{ // 属性监听器 // 属性即将改 ...

  8. Spring – 缓存注解

    Spring缓存抽象概述 Spring框架自身并没有实现缓存解决方案,但是从3.1开始定义了org.springframework.cache.Cache和org.springframework.ca ...

  9. week1 四则运算

    四则运算满足简单加减乘除,以及包含括号的复杂四则运算. 代码描述: 1.采用random随机数产生要参与计算的数字,以及运算符号 2.采用Scanner获取控制台输入的结果,与计算出来的结果进行比对, ...

  10. (转) Elasticsearch 5.0 安装 Search Guard 5 插件

    一.Search Guard 简介 Search Guard  是 Elasticsearch 的安全插件.它为后端系统(如LDAP或Kerberos)提供身份验证和授权,并向Elasticsearc ...