本部分为爬虫入门篇的实战教程,我会用到除了selenium外所有在上文介绍过的模块来编写实例,爬取4399小游戏网站首页上的内容。
robots.txtrobots.txt是指存放在网页根目录下的一个文件,广义上也指互联网间的robots协议。
robots协议对此协议的定义存在歧义。有些资料上说robots是针对搜索引擎爬虫的,有些资料上说所有爬虫都要遵循。本文采取后者。
robots协议全称为网络爬虫排除标准(Robots Exclusion Protocol)。这个协议告诉了网络爬虫哪些网站是可以爬取的,哪些爬虫可以爬取此网站。robots协议通过在网站根目录下放置robots.txt(全部小写)文件来实现。
robots.txt 语法robots.txt文件非常直观,一行一条规则。在这里我们简单介绍一下,只要读者能够基本看懂robots.txt就行(事实上,现在也有很多在线生成robots.txt的工具,即使你要写robots.txt也不用全学会,看看要用的就行)。
-User-Agent:允许访问的搜索引擎爬虫名,在多节时是关于此爬虫的规则。为*则所有爬虫都可以访问。
-Disallow:不允许访问的目录名,以/开头,屏蔽此目录下的所有链接,如果是一个具体的网页则是屏蔽此网页。如果单有一个/则是屏蔽所有链接。
-Allow:与Disallow规则相反。
-Sitemap:爬虫可以爬取的其他不能从网站上直接访问到的链接及其相关信息。
-Crawl-delay:抓取延迟,两次抓取之间需要等待的秒数。(貌似已经不支持了)
君子协定可以看出,robots协议只是告知爬虫哪些网站不能爬取,并没有真正的起到阻止爬虫的作用。事实上也存在一些排除爬虫的方法,比如检查UA头、高频率访问跳出验证界面、验证码(非机器人验证,谷歌不是最喜欢这个)、使用Ajax等,但这些方法要么妨碍了允许爬取的爬虫,要么甚至妨碍到了真人用户。
为了用户以及服务器、搜索爬虫三方共同着想,robots协议事实上是一个在服务器与搜索引擎之间共同遵守的君子协议。因此,很多规则的用与否其实取决于各大搜索引擎(比如Request-rate差不多没有搜索引擎认可了),robots协议的语法一直在变化当中。
希望看到这里的读者也能够遵守robots协议,技术应该用在向上的地方。
何时需要robots协议?很显然,需要的时候用。当你不希望某些爬虫访问某些页面时,robots协议就会派上用场。比如说百度的robots协议里其实禁止了360的爬虫(我大胆推测,因为写了很多爬虫就是没有写360,而且百度的robots.txt好像一年前就是这样了,360倒是写的很大方)。如果你希望爬虫爬取你网站的所有内容,最好直接不使用robots协议。
查看4399 的robots.txt4399的robots.txt文件如下所示:
User-agent: *Disallow: /upload_pic/Disallow: /upload_swf/Disallow: /360/Disallow: /public/Disallow: /yxbox/Disallow: /360game/Disallow: /baidugame/Disallow: /loadimg/Disallow: /index_pc.htmDisallow: /flash/32979_pc.htmDisallow: /flash/35538_pc.htmDisallow: /flash/48399_pc.htmDisallow: /flash/seer_pc.htmDisallow: /flash/58739_pc.htmDisallow: /flash/78072_pc.htmDisallow: /flash/130396_pc.htmDisallow: /flash/80727_pc.htmDisallow: /flash/151038_pc.htmDisallow: /flash/10379_pc.htmDisallow: /flash/188528_pc.htmDisallow: /flash/*_pc.htmDisallow: /index_old.htmDisallow: /flash/188420_2.htmDisallow: /flash/188420.htmDisallow: /zzy/188420.htmDisallow: /flash/209902.htm第一行就可以看出4399的网站允许了所有爬虫,由于我们只爬取首页所以下面的Disallow不用详细看,没有/就行(事实上4399也没有拦截UA头,不知道有没有限定爬取频率,我猜没有)。
所以我们可以开始分析4399的首页了。
设定并分析目标2020年8月25日的4399网站首页如图所示,我们把目标暂且定为大红圈内部分,获取其中的文本内容和链接:
F12检查源码得出此范围的源码在上图的小方框内,其只有一个class为middle_2。而我们需要的所有内容都在叶子节点处的span内。分析本段代码的DOM,绘图如图所示。
需要获取的DOM树
代码urllib2&bs4def lib2_bs4(): from urllib.request import urlopen from bs4 import BeautifulSoup response=urlopen("https://4399 ") html=response.read().decode("gb2312") #因为事先看过,直接指定编码 soup=BeautifulSoup(html,"lxml") for i in soup.find_all("div",class_="middle_2"): #先获取最外面的,也就是主体内容 for m in i.find_all("span"): #我们事先查看过了,所有的span内容都需要获取 if(m.a['href'].find("http")==-1): #大多数网站对内链都用的是相对定位 print("https://4399 "+m.a['href']) else: #但是我们也不能排除有外部链 print(m.a['href']) #获取href属性,也就是链接 print(m.a.string) #获取文字内容requests&lxmldef reqs_lxml(): import requests from lxml import etree response=requests.get("https://4399 ") response.encoding="gb2312" #同上 lhtml=etree.HTML(response.text) for i in lhtml.xpath("//*[@class='middle_2']/div/div/div/span"): if(i.xpath("a/b")!=[]): #为什么bs4里没有这个判断?因为这里仅仅有一个NavigableString(bs4里的对象) print(i.xpath("a/b")[0].text) else: print(i.xpath("a")[0].text) if(i.xpath("a/@href")[0].find("http")==-1): print("https://4399 ",end="") #设置不换行 print(i.xpath("a/@href")[0]) for i in lhtml.xpath("//*[@class='middle_2']/div/div/span"): #仔细观察可以看到后面几排少了一个div嵌套 if(i.xpath("a/b")!=[]): print(i.xpath("a/b")[0].text) else: print(i.xpath("a")[0].text) if(i.xpath("a/@href")[0].find("http")==-1): print("https://4399 ",end="") print(i.xpath("a/@href")[0]) 总结本文TAG:www4399小游戏
猜你喜欢
- 2022-02-22英雄联盟隐藏分(英雄联盟隐藏分多少算正常)
- 2022-02-22矛盾找出骗子的简单介绍
- 2022-02-21太阁立志传4修改器(太阁立志传4贴吧)
- 2022-02-21儿童小游戏免费下载(儿童小游戏免费马上玩)
- 2022-02-21模拟人生2四季(模拟人生下载)
- 2022-02-20第三人称射击网游(第三人称单机射击游戏下载)
- 最近发表
- 标签列表
-
- 传奇手游私服 (7)
- 新开传奇手游网站 (7)
- 传奇单职业 (2)
- 传奇手游变态版 (1)
- 传奇发布网 (7)
- 传奇sf手游版 (1)
- 新开传奇 (1)
- 传奇私服 (1)
- 拳皇7k7k小游戏 (0)
- nitrome小游戏 (0)
- 最新传奇发布网 (0)
- 每日新开传奇网 (0)
- 找176复古传奇 (0)
- 超级变态热血传奇 (0)
- nba2k11最新名单 (0)
- 王者荣耀更新 (0)
- 王者荣耀体验服申请 (0)
- 英雄联盟出装顺序 (0)
- 三国志单机游戏 (0)
- 王者荣耀宫本武藏符文 (0)
- 梦幻西游109神器任务攻略 (0)
- 下载英雄联盟 (0)
- 机械公敌兰博出装 (0)
- 王者荣耀西施 (0)
- 王者荣耀无限火力 (0)
- 不知火舞王者荣耀 (0)
- 300英雄三笠出装 (0)
- 冒险岛2职业 (0)
- 龙将2官网 (0)
- 热血传奇怀旧版好玩吗 (0)
- 传奇超级 (0)
- 传奇师服 (0)
- 迷失传奇发布网 (0)
- 韩版传奇私服发布网 (0)
- 传世新开 (0)
- 传奇2外挂 (0)
- 传奇复古 (0)
- 单职业变态 (0)
- 传奇sf180 (0)
- 传世sf吧 (0)
- 传奇私服gm命令大全 (0)
- 传奇世界私服刷元宝 (0)
- dnf私服发布网 (0)
- 网页三国游戏排行榜 (0)
- 傲视千雄私服 (0)
- 热血传奇176客户端下载 (0)
- 最新机战私服 (0)
- 传奇吉吉免费版 (0)
- 蜘蛛纸牌游戏 (0)
- 最热门的网游排行榜 (0)
- 2d网游 (0)
- 网游私服排行榜 (0)
- moba网游 (0)
- 439小游戏 (0)
- 飞车小游戏 (0)
- 奥奇传说小游戏 (0)
- 龙斗士小游戏 (0)
- 下载手机游戏 (0)
- 维京神域之战 (0)
- 星际2单机 (0)
- 防守类单机游戏 (0)
- 灰烬攻略 (0)
- 战神3pc版 (0)
- 腐尸之屋 (0)
- 新神奇传说3秘籍 (0)
- 生化危机5怎么存档 (0)
- 三国群英传1单机版下载 (0)
- 捕鱼达人手机版 (0)
- 仙剑奇侠传游戏1 (0)
- 暴力摩托单机版下载 (0)
- fifa12下载 (0)
- 色单机游戏 (0)
- 三国志13修改器 (0)
- 梦幻西游单机版神剑情天3 (0)
- 对打单机游戏 (0)
- 三国群英传7补丁 (0)
- 最好单机游戏下载 (0)
- 流星蝴蝶剑秘籍大全 (0)
- 孢子 (0)
- 梦幻西游赚钱 (0)
- 梦幻西游答题 (0)
- 王者荣耀防沉迷 (0)
- 梦幻西游挖图技巧 (0)
- 梦幻岛游戏 (0)
- 轩辕剑网游官网 (0)
- 梦幻西游手游论坛 (0)
- 极道阴阳师 (0)
- 仙剑奇侠传3下载 (0)
- 七龙珠人物换装2 (0)
- 赛尔号手机版下载 (0)
- lol战队名字 (0)
- 黑湾海盗中文版 (0)
- 超级街霸4街机版 (0)
- 侵略行为 (0)
- 孤岛惊魂3结局 (0)
- 龙珠单机游戏大全 (0)
- 仙剑三游戏下载 (0)
- 策略单机游戏 (0)
- 家园2简体中文版 (0)
- 现代战争2 (0)