python3 爬虫之爬取糗事百科

简介: 闲着没事爬个糗事百科的笑话看看python3中用urllib.request.urlopen()打开糗事百科链接会提示以下错误http.client.RemoteDisconnected: Remote end closed connection without respons...

闲着没事爬个糗事百科的笑话看看


python3中用urllib.request.urlopen()打开糗事百科链接会提示以下错误

http.client.RemoteDisconnected: Remote end closed connection without response

但是打开别的链接就正常,很奇怪不知道为什么,没办法改用第三方模块requests,也可以用urllib3模块,还有一个第三方模块就是bs4(beautifulsoup4)


最后经过不懈努力,终于找到了为什么,原因就是没有添加headers,需要添加headers,让网站认为是从浏览器发起的请求,这样就不会报错了。

import urllib.request

url = 'http://www.qiushibaike.com/8hr/page/5/'
 
user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'
headers = {'User-agent':user_agent}

request = urllib.request.Request(url,headers=headers)
html = urllib.request.urlopen(request)
print(html.read().decode())


requests模块安装和使用,这里就不说了

附上官方链接:http://docs.python-requests.org/en/master/

中文文档:http://cn.python-requests.org/zh_CN/latest/

>>> r = requests.get('https://api.github.com/user', auth=('user', 'pass'))
>>> r.status_code
200
>>> r.headers['content-type']
'application/json; charset=utf8'
>>> r.encoding
'utf-8'
>>> r.text
u'{"type":"User"...'
>>> r.json()
{u'private_gists': 419, u'total_private_repos': 77, ...}


urllib3模块安装和使用,这里也不说了

附上官方链接:https://urllib3.readthedocs.io/en/latest/

>>> import urllib3
>>> http = urllib3.PoolManager()
>>> r = http.request('GET', 'http://httpbin.org/robots.txt')
>>> r.status
200
>>> r.data
'User-agent: *\nDisallow: /deny\n'


bs4模块安装和使用

附上官方链接:https://www.crummy.com/software/BeautifulSoup/


好了,上面三个模块有兴趣的可以自己研究学习下,以下是代码:

爬取糗事百科的段子和图片

import requests
import urllib.request
import re

def get_html(url):
    page = requests.get(url)
    return page.text

def get_text(html,file):
    textre = re.compile(r'content">\n*<span>(.*)</span>')
    textlist = re.findall(textre,html)
    num = 0
    txt = []
    for i in textlist:
        num += 1
        txt.append(str(num)+'.'+i+'\n'*2)
    with open(file,'w',encoding='utf-8') as f:
        f.writelines(txt)

def get_img(html):
    imgre = re.compile(r'<img src="(.*\.JPEG)" alt=',re.IGNORECASE)
    imglist = re.findall(imgre,html)
    x = 0
    for imgurl in imglist:
        x += 1
        urllib.request.urlretrieve(imgurl, '%s.jpg' % x)

html = get_html("http://www.qiushibaike.com/8hr/page/2/")

get_text(html,'a.txt')
get_img(html)

很简单,欢迎大家吐槽,有兴趣的可以加群一块学习(219636001)

目录
相关文章
|
数据采集 JSON 数据格式
python爬虫之app爬取-charles的使用
charles 基本原理,charles抓包,分析,重发。
826 0
|
测试技术 持续交付 开发者
探索自动化测试的无限可能:从入门到精通
在软件开发领域,确保产品质量是至关重要的。自动化测试作为一种高效、可靠的测试方法,正逐渐成为行业标准。本文将带你深入了解自动化测试的世界,从基础概念到实践技巧,帮助你掌握这一强大的工具。无论你是初学者还是有经验的开发者,都能从中获得宝贵的知识和启发。
|
10月前
|
存储 Kubernetes 测试技术
企业级LLM推理部署新范式:基于ACK的DeepSeek蒸馏模型生产环境落地指南
本教程演示如何在ACK中使用vLLM框架快速部署DeepSeek R1模型推理服务。
|
移动开发 编解码 JavaScript
h5页面在移动端实现禁止缩放、双击放大和双指放大
h5页面在移动端实现禁止缩放、双击放大和双指放大
|
存储 Python
Python Logging 限制文件大小
Python Logging 限制文件大小
230 0
|
缓存 自然语言处理 JavaScript
万字长文深度解析JDK序列化原理及Fury高度兼容的极致性能实现
Fury是一个基于JIT动态编译的高性能多语言原生序列化框架,支持Java/Python/Golang/C++/JavaScript等语言,提供全自动的对象多语言/跨语言序列化能力,以及相比于别的框架最高20~200倍的性能。
169107 12
|
前端开发
【专栏】`webpack` 的 `DefinePlugin` 插件用于在编译时动态定义全局变量,实现环境变量差异化、配置参数动态化和条件编译
【4月更文挑战第29天】`webpack` 的 `DefinePlugin` 插件用于在编译时动态定义全局变量,实现环境变量差异化、配置参数动态化和条件编译。通过配置键值对,如 `ENV: JSON.stringify(process.env.NODE_ENV)`,可以在代码中根据环境执行相应逻辑。实际应用包括动态加载资源、动态配置接口地址和条件编译优化代码。注意变量定义的合法性和避免覆盖,解决变量未定义或值错误的问题,以提升开发效率和项目质量。
652 3
|
小程序 UED
微信小程序跳转的几种方式
微信小程序跳转的几种方式
479 2
|
安全 算法 测试技术
什么是灰盒测试?
什么是灰盒测试?
1101 1
|
Ubuntu Python
执行apt-get update时 报错ModuleNotFoundError: No module named ‘debian‘
执行apt-get update时 报错ModuleNotFoundError: No module named ‘debian‘
339 0