文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

python3 爬虫之爬取糗事百科

2023-01-31 08:11

关注

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


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)

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯