【Python爬虫】你还在纠结选择哪个爬虫库嘛,全都拿来吧你

【Python爬虫】你还在纠结选择哪个爬虫库嘛,全都拿来吧你,第1张

🌈据说,看我文章时 关注、点赞、收藏 的 帅哥美女们 心情都会不自觉的好起来。


前言:
🧡作者简介:大家好我是 user_from_future ,意思是 “ 来自未来的用户 ” ,寓意着未来的自己一定很棒~
✨个人主页:点我直达,在这里肯定能找到你想要的~
👍专栏介绍:Python爬虫 ,一个专注于分享爬虫技巧与案例的专栏~

专栏文章直链:
对旧博客反爬指导文章部分更新说明
beautifulsoup4无法正确解析网页的坑
QQ相关信息获取
Python爬取曾今的K歌
用“小聪明”实现连续爬取谷歌翻译
手把手带你用Python爬取反爬策略的网站

Python爬虫库
  • 😆获取数据部分
    • 🚗requests
    • 🚓you-get
    • 🚕autoscraper
    • 🛺urllib
  • 总结

你学过爬虫吗,你用过这些爬虫库吗,这些都是非(大型框架、驱动浏览器和分布式)的爬虫库。


😆获取数据部分 🚗requests

看到目录,爬虫初学者可能只认识这个库,因为他是使用最多的爬虫库,也是最常见的爬虫库。



requests是用Python编写的、基于urllib3、采用Apache2 Licensed开源协议的HTTP库。


它比urllib更方便,可以节约我们大量的工作,完全满足日常HTTP测试需求。



使用 pip install requests 即可安装此库,像如图一样显示 Successfully 就说明安装成功了。


先将本章需要的第三方库、网址、请求头等准备好:

import sys
import you_get
import requests
from requests import utils
from autoscraper import AutoScraper
from urllib import request, parse
url = 'http://110.42.181.215:8866'  # 炸飞机双人小游戏在线玩
url2 = 'http://110.42.181.215:6699/login'  # 自动应答表单(测试用)
url3 = 'https://www.bilibili.com/video/BV1Em4y1R7Sz?t=40.8'  # 有人一生被童年治愈,有人用一生来治愈童年(bilibili视频)
url4 = 'https://www.csdn.net'  # C站官网(用于爬取热点)
cookies = ''
# 常见的请求头是用户代理User-Agent、目的地(域名+端口号)Host、站点(协议+域名+端口)Origin、原始资源网址(协议+域名+路径+查询参数)Referer
headers = {
    'Cookie': cookies,
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.102 Safari/537.36'
}

普通的访问网站,会返回一个Response对象和状态码:

res = requests.get(url, headers=headers, cookies=cookies_dict)
res返回:<Response [200]>

使用会话维持访问网站(适合需要登录或者网站跳转会设置cookie的网站),也返回一个Response对象和状态码:

session = requests.session()  # 能建立连接池,会自动保存管理cookie等值
utils.add_dict_to_cookiejar(session.cookies, cookies_dict)  # 将自定义的cookie字典添加到session会话中
res = session.get(url, headers=headers, cookies=cookies_dict)
res返回:<Response [200]>

Response对象作为相应对象,有很多属性:

# 网页是否成功访问,返回 [True, False]
>>> res.ok
True
# 网页返回的状态码,返回 [100, ..., 200, ..., 300, ..., 400, ..., 500, ...]
>>> res.status_code
200
# 网页的请求头字典
>>> res.headers
{'Content-Type': 'text/html; charset=utf-8', 'Content-Length': '2647', 'Server': 'Werkzeug/1.0.1 Python/3.7.9', 'Date': 'Tue, 15 Mar 2022 13:21:02 GMT'}
# 网页的cookie值,以RequestsCookieJar类的方式保存
>>> res.cookies
<RequestsCookieJar[]>
# 网页的地址(有的网页会发生跳转,可能会和初始访问地址不同)
>>> res.url
'http://110.42.181.215:8866/'
# 返回从header的charset字段中提取的编码方式(猜测),默认为ISO-8859-1(无法解析中文),可以被赋值
>>> res.encoding
'utf-8'
# 从网页内容中分析网页编码的方式(比res.encoding更准确)
>>> res.apparent_encoding
'utf-8'
# 返回网页的源数据(字节)内容,下载媒体资源时会用到
>>> res.content
b'\n\n\t\n\t\t\n\t\t\xe7\x82\xb8\xe9\xa3\x9e\xe6\x9c\xba\xe5\x8f\x8c\xe4\xba\xba\xe5\xb0\x8f\xe6\xb8\xb8\xe6\x88\x8f\xe5\x9c\xa8\xe7\xba\xbf\xe7\x8e\xa9\n\t\t\n\t\n\t\n\t\t
\n\t\t\t\n\t\t\t\t\xe7\x82\xb8\xe9\xa3\x9e\xe6\x9c\xba\xe5\x8f\x8c\xe4\xba\xba\xe5\xb0\x8f\xe6\xb8\xb8\xe6\x88\x8f\xe5\x9c\xa8\xe7\xba\xbf\xe7\x8e\xa9\n\t\t\t\n\t\t\t\n\t\t\t\t
\xe6\x88\x91\xe6\x96\xb9\xe9\xa3\x9e\xe6\x9c\xba\xe5\x8c\xba\xe5\x9f\x9f
\n\t\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\t
\xe6\x95\x8c\xe6\x96\xb9\xe9\xa3\x9e\xe6\x9c\xba\xe5\x8c\xba\xe5\x9f\x9f
\n\t\t\t\t\n\t\t\t\n\t\t
\n\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\t\t\xe6\xb8\xb8\xe6\x88\x8f\xe8\xaf\xb4\xe6\x98\x8e\xef\xbc\x9a\n\t\t\t

1\xe3\x80\x81\xe7\x82\xb9\xe5\x87\xbb\xe5\x88\x9b\xe5\xbb\xba\xe6\x88\xbf\xe9\x97\xb4\xe8\x8e\xb7\xe5\x8f\x96\xe6\x88\xbf\xe9\x97\xb4\xe5\x8f\xb7\xef\xbc\x8c\xe9\x82\x80\xe8\xaf\xb7\xe5\x8f\xa6\xe4\xb8\x80\xe5\x8d\x8a\xe8\xbe\x93\xe5\x85\xa5\xe6\x88\xbf\xe9\x97\xb4\xe5\x8f\xb7\xe5\x8d\xb3\xe5\x8f\xaf\xe5\x8a\xa0\xe5\x85\xa5\xe6\x88\xbf\xe9\x97\xb4\xe3\x80\x82

\n\t\t\t

2\xe3\x80\x81\xe5\xa6\x82\xe6\x9e\x9c\xe7\x94\xb5\xe8\x84\x91\xe5\xb1\x8f\xe5\xb9\x95\xe5\x88\x86\xe8\xbe\xa8\xe7\x8e\x87\xe8\xbe\x83\xe4\xbd\x8e\xef\xbc\x8c\xe5\x8f\xaf\xe4\xbb\xa5\xe6\x8c\x89\xe4\xbd\x8f Ctrl \xe5\x92\x8c\xe9\xbc\xa0\xe6\xa0\x87\xe6\xbb\x9a\xe8\xbd\xae\xe8\xb0\x83\xe6\x95\xb4\xe7\xbc\xa9\xe6\x94\xbe\xef\xbc\x8c\xe6\x8e\xa8\xe8\x8d\x90\xe4\xbd\xbf\xe7\x94\xa81920x1080\xe5\x88\x86\xe8\xbe\xa8\xe7\x8e\x87\xe3\x80\x82

\n\t\t\t

3\xe3\x80\x81\xe5\xa6\x82\xe6\x9e\x9c\xe5\x87\xbb\xe4\xb8\xad\xe6\x95\x8c\xe6\x96\xb9\xe9\xa3\x9e\xe6\x9c\xba\xe5\x88\x99\xe6\x96\xb9\xe5\x9d\x97\xe5\x8f\x98\xe7\xba\xa2\xef\xbc\x8c\xe5\x90\xa6\xe5\x88\x99\xe6\x96\xb9\xe5\x9d\x97\xe5\x8f\x98\xe7\x99\xbd\xef\xbc\x9b\xe5\x87\xbb\xe4\xb8\xad\xe9\xa3\x9e\xe6\x9c\xba\xe6\xa0\xb8\xe5\xbf\x83\xef\xbc\x88\xe7\xba\xa2\xe8\x89\xb2\xe8\x99\x9a\xe7\xba\xbf\xef\xbc\x89\xe5\x88\x99\xe6\x95\xb4\xe4\xb8\xaa\xe9\xa3\x9e\xe6\x9c\xba\xe9\x83\xbd\xe4\xbc\x9a\xe6\x98\xbe\xe7\xa4\xba\xe4\xb8\x94\xe5\x8f\x98\xe7\x81\xb0\xef\xbc\x88\xe4\xbb\xa3\xe8\xa1\xa8\xe5\xb7\xb2\xe8\xa2\xab\xe5\x87\xbb\xe6\xaf\x81\xef\xbc\x89\xef\xbc\x8c\xe6\xaf\x94\xe8\xb0\x81\xe8\x83\xbd\xe6\x9b\xb4\xe5\xbf\xab\xe5\x87\xbb\xe6\xaf\x81\xe5\xaf\xb9\xe6\x96\xb9\xe4\xb8\x89\xe6\x9e\xb6\xe9\xa3\x9e\xe6\x9c\xba\xe5\x90\xa7~

\n\t\t\t

4\xe3\x80\x81\xe6\xaf\x8f\xe4\xb8\xaa\xe4\xba\xba\xe9\x83\xbd\xe8\xa6\x81\xe6\x94\xbe\xe7\xbd\xae3\xe6\x9e\xb6\xe9\xa3\x9e\xe6\x9c\xba\xef\xbc\x8c\xe4\xb8\x80\xe6\x97\xa6\xe6\x94\xbe\xe4\xb8\x8b\xe4\xb8\x8d\xe5\x8f\xaf\xe6\x9b\xb4\xe6\x94\xb9\xef\xbc\x8c\xe6\x8b\x96\xe5\x8a\xa8\xe5\x88\xb0\xe6\x88\x91\xe6\x96\xb9\xe9\xa3\x9e\xe6\x9c\xba\xe5\x8c\xba\xe5\x9f\x9f\xef\xbc\x88\xe5\xb7\xa6\xef\xbc\x89\xe5\x86\x85\xe5\x8d\xb3\xe5\x8f\xaf\xef\xbc\x8c\xe5\x8f\x8c\xe5\x87\xbb\xe5\x8f\xaf\xe4\xbb\xa5\xe9\xa1\xba\xe6\x97\xb6\xe9\x92\x88\xe8\xb0\x83\xe6\x95\xb4\xe6\x96\xb9\xe5\x90\x91\xef\xbc\x8c\xe6\x8b\x96\xe5\x8a\xa8\xe6\x97\xb6\xe8\xaf\xb7\xe5\xb0\x86\xe9\xa3\x9e\xe6\x9c\xba\xe6\xa0\xb8\xe5\xbf\x83\xef\xbc\x88\xe7\xba\xa2\xe8\x89\xb2\xe8\x99\x9a\xe7\xba\xbf\xef\xbc\x89\xe5\xaf\xb9\xe5\x87\x86\xe6\x8b\x96\xe5\x8a\xa8\xe5\x90\x8e\xe7\x9a\x84\xe6\x96\xb9\xe5\x9d\x97\xe3\x80\x82

\n\t\t\t

5\xe3\x80\x81\xe6\x9c\xac\xe6\xb8\xb8\xe6\x88\x8f\xe4\xb8\xba\xe5\x9b\x9e\xe5\x90\x88\xe5\x88\xb6\xe6\xb8\xb8\xe6\x88\x8f\xef\xbc\x8c\xe5\x85\x88\xe6\x91\x86\xe6\x94\xbe\xe5\xae\x8c\xe8\x80\x85\xe5\xb0\x86\xe5\x85\x88\xe6\x89\x8b\xef\xbc\x8c\xe7\x82\xb9\xe5\x87\xbb\xe6\x95\x8c\xe6\x96\xb9\xe9\xa3\x9e\xe6\x9c\xba\xe5\x8c\xba\xe5\x9f\x9f\xef\xbc\x88\xe5\x8f\xb3\xef\xbc\x89\xe8\xbf\x9b\xe8\xa1\x8c\xe6\x94\xbb\xe5\x87\xbb\xef\xbc\x8c\xe5\x87\xbb\xe4\xb8\xad\xe9\xa3\x9e\xe6\x9c\xba\xe4\xb8\xad\xe5\xbf\x83\xef\xbc\x88\xe7\xba\xa2\xe8\x99\x9a\xe7\xba\xbf\xe8\xbe\xb9\xe6\xa1\x86\xe6\x96\xb9\xe5\x9d\x97\xef\xbc\x89\xe5\x88\x99\xe9\xa3\x9e\xe6\x9c\xba\xe7\xab\x8b\xe5\x88\xbb\xe5\x9d\xa0\xe6\xaf\x81\xef\xbc\x8c\xe5\x9d\xa0\xe6\xaf\x81\xe5\x90\x8e\xe4\xbc\x9a\xe5\x9c\xa8\xe5\x9b\xbe\xe4\xb8\xad\xe6\x98\xbe\xe7\xa4\xba\xe9\xa3\x9e\xe6\x9c\xba\xe8\xbd\xae\xe5\xbb\x93\xef\xbc\x8c\xe4\xb8\x8d\xe5\x8f\xaf\xe6\x92\xa4\xe9\x94\x80\xe6\x94\xbb\xe5\x87\xbb\xef\xbc\x8c\xe8\xaf\xb7\xe8\xb0\xa8\xe6\x85\x8e\xe6\x94\xbb\xe5\x87\xbb\xe3\x80\x82

\n\t\t\n\t\t\n\t\t\t\n\t\t\t\t

\xe8\xaf\xb7\xe8\xbe\x93\xe5\x85\xa5\xe6\x88\xbf\xe9\x97\xb4\xe5\x8f\xb7\xe5\xbc\x80\xe5\xa7\x8b\xe6\xb8\xb8\xe6\x88\x8f

\n\t\t\t\t

\n\t\t\t\t

\n\t\t\t\t\t

\n\t\t\t\t\t

\n\t\t\t\t\t\t\xe5\xa4\xa7\xe5\xb0\x8f\xef\xbc\x9a\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t

\n\t\t\t\t
\n

\n\t\t\t\t

\n\t\t\t\n\t\t\n\t\t\n\t\n'
# 返回网页源代码,相当于res.content.decode(res.apparent_encoding) >>> res.text '\n\n\t\n\t\t\n\t\t炸飞机双人小游戏在线玩\n\t\t\n\t\n\t\n\t\t
\n\t\t\t\n\t\t\t\t炸飞机双人小游戏在线玩\n\t\t\t\n\t\t\t\n\t\t\t\t
我方飞机区域
\n\t\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\t
敌方飞机区域
\n\t\t\t\t\n\t\t\t\n\t\t
\n\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\t\t游戏说明:\n\t\t\t

1、 点击创建房间获取房间号,邀请另一半输入房间号即可加入房间。


\n\t\t\t

2、如果电脑屏幕分辨率较低,可以按住 Ctrl 和鼠标滚轮调整缩放,推荐使用1920x1080分辨率。


\n\t\t\t

3、如果击中敌方飞机则方块 变红,否则方块变白;击中飞机核心(红色虚线)则整个飞机都会显示且变灰(代表已被击毁),比谁能更快击毁对方三架飞机吧~

\n\t\t\t

4、每个人都要放置3架飞机,一旦放下不可更改,拖动到我方飞机区域(左)内即可,双击可以顺时针调整方向,拖动时请将飞机核心(红色虚线)对准拖动后的方块。


\n\t\t\t

5、本游戏为回合制游戏,先摆放完者将先手,点击敌方飞机区域(右)进行攻击,击中飞机中心(红虚线边框方块)则飞机立刻坠毁,坠毁后会在图中显示飞机轮廓,不可撤销攻击,请谨慎攻击。


\n\t\t\n\t\t\n\t\t\t\n\t\t\t\t

请输入房间号开始游戏

\n\t\t\t\t

\n\t\t\t\t

\n\t\t\t\t\t

\n\t\t\t\t\t

\n\t\t\t\t\t\t大小:\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t

\n\t\t\t\t
\n

\n\t\t\t\t

\n\t\t\t\n\t\t\n\t\t\n\t\n'

由于我爬的网页是文本,所以暂时常用上述属性。


如果我们爬到的数据是json格式(列表/字典),那么我们可以使用如下方法:

res = session.get(url2 + '?test=001', headers=headers, cookies=cookies_dict)
print(res.json())  # 返回网页的json对象,如果返回内容不是json字符串,则会抛出simplejson.errors.JSONDecodeError异常
res = session.get(url2, params={'test': '002'}, headers=headers, cookies=cookies_dict)
print(res.json())
res = session.post(url2, data={'test': '003'}, headers=headers, cookies=cookies_dict)
print(res.json())
所有返回:
{'content': {'test': '001'}, 'method': 'GET', 'res': '提交成功', 'title': '表单自动响应'}
{'content': {'test': '002'}, 'method': 'GET', 'res': '提交成功', 'title': '表单自动响应'}
{'content': {'test': '003'}, 'method': 'POST', 'res': '提交成功', 'title': '表单自动响应'}

可见 get 一般使用 params 参数,或者直接跟在 url 地址后面。



而 post 一般使用 data 参数,用于构造请求体。


🚓you-get

这是一个类似于IDM的视频图片音乐嗅探库,不过他的嗅探范围没有IDM广,多半是F12能看到的媒体资源,下载资源挺方便的。



使用 pip install you-get 即可安装此库,像如图一样显示 Successfully 就说明安装成功了。



如果要使用命令行下载,那么可以输入 you-get 网址 即可下载嗅探到的视频图片音乐了。


而如果要编写程序(比如要进行批量 *** 作),那么可以按如下方式编写,-o指定保存位置,目录不存在会自动创建:

path = "bilibili"  # 要保存的位置,不存在会自动创建
sys.argv = ["you-get", "-o", path, url3]
you_get.main()

you-get 中文说明地址

目前支持解析的网站与能解析的媒体类型信息如下:

网站URL视频图像音频
YouTubehttps://www.youtube.com/
Twitterhttps://twitter.com/
VKhttp://vk.com/
Vinehttps://vine.co/
Vimeohttps://vimeo.com/
Vidtohttp://vidto.me/
Veohhttp://www.veoh.com/
Tumblrhttps://www.tumblr.com/
TEDhttp://www.ted.com/
SoundCloudhttps://soundcloud.com/
Pinteresthttps://www.pinterest.com/
MusicPlayOnhttp://en.musicplayon.com/
MTV81http://www.mtv81.com/
Mixcloudhttps://www.mixcloud.com/
Metacafehttp://www.metacafe.com/
Magistohttp://www.magisto.com/
Khan Academyhttps://www.khanacademy.org/
JPopsuki TVhttp://www.jpopsuki.tv/
Internet Archivehttps://archive.org/
Instagramhttps://instagram.com/
Heavy Music Archivehttp://www.heavy-music.ru/
Google+https://plus.google.com/
Freesoundhttp://www.freesound.org/
Flickrhttps://www.flickr.com/
Facebookhttps://www.facebook.com/
eHowhttp://www.ehow.com/
Dailymotionhttp://www.dailymotion.com/
CBShttp://www.cbs.com/
Bandcamphttp://bandcamp.com/
AliveThaihttp://alive.in.th/
interest.mehttp://ch.interest.me/tvn
755ナナゴーゴーhttp://7gogo.jp/
niconicoニコニコ動画http://www.nicovideo.jp/
163网易视频网易云音乐http://v.163.com/http://music.163.com/
56网http://www.56.com/
AcFunhttp://www.acfun.tv/
Baidu百度贴吧http://tieba.baidu.com/
爆米花网http://www.baomihua.com/
bilibili哔哩哔哩http://www.bilibili.com/
Dilidilihttp://www.dilidili.com/
豆瓣http://www.douban.com/
斗鱼http://www.douyutv.com/
凤凰视频http://v.ifeng.com/
风行网http://www.fun.tv/
iQIYI爱奇艺http://www.iqiyi.com/
激动网http://www.joy.cn/
酷6网http://www.ku6.com/
酷狗音乐http://www.kugou.com/
酷我音乐http://www.kuwo.cn/
乐视网http://www.letv.com/
荔枝FMhttp://www.lizhi.fm/
秒拍http://www.miaopai.com/
MioMiod幕网http://www.miomio.tv/
痞客邦https://www.pixnet.net/
PPTV聚力http://www.pptv.com/
齐鲁网http://v.iqilu.com/
QQ腾讯视频http://v.qq.com/
阡陌视频http://qianmo.com/
Sina新浪视频微博秒拍视频http://video.sina.com.cn/http://video.weibo.com/
Sohu搜狐视频http://tv.sohu.com/
天天动听http://www.dongting.com/
Tudou土豆http://www.tudou.com/
虾米http://www.xiami.com/
阳光卫视http://www.isuntv.com/
音悦Taihttp://www.yinyuetai.com/
Youku优酷http://www.youku.com/
战旗TVhttp://www.zhanqi.tv/lives
央视网http://www.cntv.cn/
🚕autoscraper

这是一个学起来超快、基本上无需动脑的、被称为“最聪明”的爬虫,从名字上就不难发现:auto + scraper ,自动 + 爬虫,让你无需繁琐的找xpath、找css选择器,他能从你要抓取的网页中,搜索到你想要的数据,并建立爬取规则(就是经过什么样的路径能找到想要的数据)。



使用 pip install autoscraper 即可安装此库,像如图一样显示 Successfully 就说明安装成功了。


一般情况下是不需要更改规则的,比如爬C站首页的热点(你们使用一定要将当天的文字粘贴到 wanted_list 里面),据我测试,好像在交互式窗口执行获取到的结果为空,所以建议写进文件执行:

scraper = AutoScraper()
result = scraper.build(url=url4, wanted_list=['“我辞掉了年薪45万美元的开发工作”'])
print(result)
返回:['“我辞掉了年薪45万美元的开发工作”', '从面临退学到华为「天才少年」', '需求着急上线,是写烂代码的理由吗?', '被微软收购后却惨遭下架', '现实世界的密文', '历史上的今天:Skype 取代 MSN', 'iOS 15.4发布,支持戴口罩解锁', '开源中的巾帼力量', '苹果维修堪比登天难:评级F,获最低分!', '第一位女性商业程序员玛丽库姆斯去世']

(如图,这是今天的热点:)

🛺urllib

这个库是标准库,不用下载安装,是所有爬虫库的最最最底层库,我想现在用的人应该挺少的吧,在没网下载其他第三方库的时候就可以用这个库。


【PS:没网你爬什么?】

核心访问网址方法,会返回一个HTTPResponse对象:

res = request.urlopen(url2 + '?test=004')
res返回:<http.client.HTTPResponse object at 0x00000186880FE550>

我们可以从这个HTTPResponse对象中获取返回网页的地址、状态码、请求头和网站内容,其中网站内容只能获取一次,第二次以及之后只能得到一片空白:

# 返回的网页的地址
>>> res.geturl()
'http://110.42.181.215:8866'
# 返回的网页的状态码
>>> res.getcode()
200
# 获取请求头,以[()]列表内嵌套元组的形式返回
>>> res.getheaders()
[('Content-Type', 'text/html; charset=utf-8'), ('Content-Length', '2647'), ('Server', 'Werkzeug/1.0.1 Python/3.7.9'), ('Date', 'Tue, 15 Mar 2022 16:32:26 GMT')]
# 获取网站内容【该方法只能获得一次数据,然后res.fp数据体就变成None,第二次使用使用不会获得数据】
>>> res.read().decode()
'\n\n\t\n\t\t\n\t\t炸飞机双人小游戏在线玩\n\t\t\n\t\n\t\n\t\t
\n\t\t\t\n\t\t\t\t炸飞机双人小游戏在线玩\n\t\t\t\n\t\t\t\n\t\t\t\t
我方飞机区域
\n\t\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\t
敌方飞机区域
\n\t\t\t\t\n\t\t\t\n\t\t
\n\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\t\t游戏说明:\n\t\t\t

1、 点击创建房间获取房间号,邀请另一半输入房间号即可加入房间。


\n\t\t\t

2、如果电脑屏幕分辨率较低,可以按住 Ctrl 和鼠标滚轮调整缩放,推荐使用1920x1080分辨率。


\n\t\t\t

3、如果击中敌方飞机则方块 变红,否则方块变白;击中飞机核心(红色虚线)则整个飞机都会显示且变灰(代表已被击毁),比谁能更快击毁对方三架飞机吧~

\n\t\t\t

4、每个人都要放置3架飞机,一旦放下不可更改,拖动到我方飞机区域(左)内即可,双击可以顺时针调整方向,拖动时请将飞机核心(红色虚线)对准拖动后的方块。


\n\t\t\t

5、本游戏为回合制游戏,先摆放完者将先手,点击敌方飞机区域(右)进行攻击,击中飞机中心(红虚线边框方块)则飞机立刻坠毁,坠毁后会在图中显示飞机轮廓,不可撤销攻击,请谨慎攻击。


\n\t\t\n\t\t\n\t\t\t\n\t\t\t\t

请输入房间号开始游戏

\n\t\t\t\t

\n\t\t\t\t

\n\t\t\t\t\t

\n\t\t\t\t\t

\n\t\t\t\t\t\t大小:\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t

\n\t\t\t\t
\n

\n\t\t\t\t

\n\t\t\t\n\t\t\n\t\t\n\t\n'

request.urlopen 默认是 GET 方法,当有 data 参数时,请求方法自动变成 POST ,测试如下:

# GET方法
>>> res = request.urlopen(url2 + '?test=004')
>>> res.read().decode('unicode-escape')
'{"content":{"test":"004"},"method":"GET","res":"提交成功","title":"表单自动响应"}\n'
# POST方法
>>> res = request.urlopen(url2, data=b'test=005')
>>> res.read().decode('unicode-escape')
'{"content":{"test":"005"},"method":"POST","res":"提交成功","title":"表单自动响应"}\n'

当然,在使用了Request请求头对象之后,不仅能传递headers请求头,而且即时传入data也能用GET请求:

>>> req = request.Request(url2, data=b'test=006', headers=headers, method='GET')
>>> res = request.urlopen(req, data=b'test=007')
>>> res.read().decode('unicode-escape')
'{"content":{"test":"007"},"method":"GET","res":"提交成功","title":"表单自动响应"}\n'

上面是 urllib.request 的主要用法,接下来还有一些 urllib.parse 中常用的解析函数:

# 处理中文,对汉字进行编码 *** 作
>>> parse.quote('test=测试')
'test%3D%E6%B5%8B%E8%AF%95'
# 处理中文,对汉字进行解码 *** 作
>>> parse.unquote('test%3D%E6%B5%8B%E8%AF%95')
'test=测试'
# 用字典进行拼接字符串并编码(适用于较长的url参数)
>>> parse.urlencode({'test': '测试'})
'test=%E6%B5%8B%E8%AF%95'
# 拆分网址各部分
>>> parse.urlparse(url2 + '?test=测试')
ParseResult(scheme='http', netloc='110.42.181.215:9966', path='/login', params='', query='test=测试', fragment='')
# 合并网址各部分
>>> parse.urlunparse(['http', '110.42.181.215:6699', 'login', '', 'test=测试', ''])
'http://110.42.181.215:6699/login?test=测试'
总结
  • requests——最普遍使用的爬虫库
  • you_get——最受欢迎的爬虫库
  • autoscraper——最智能的爬虫库
  • urllib——最底层的爬虫库
  • 发出爬虫不容易,希望喜欢的小伙伴可以在关注博主的同时点个小小的赞和收藏,你的支持是我最大的动力!

你会经常使用哪一个爬虫库呢?来投个票吧~

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/577579.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-11
下一篇 2022-04-11

发表评论

登录后才能评论

评论列表(0条)

保存