爬虫实战(维基xx)

embedded/2024/11/15 6:07:42/

实战网页链接:https://www.britannica.com/topic/Wikipedia

我们可以看见网页文本上有超链接,我们可以在源码看见它们的代码:

我们开始写出简单的爬取,把它的链接全部拿取出来:

python">import requests
from bs4 import BeautifulSoup#https://www.britannica.com/topic/Wikipediaheaders = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36','Cookie': '__cf_bm=tib6ICsQJxwj9fpQPz8vhpKt84n0pXOPK6DvV8P8vc4-1713585206-1.0.1.1-3MKOfelDBDRh.z5WLq1ddVtPSuJQ69Ewh9v4Wc.Ljkw9I_G3nUUNOw3W8AG_hXTrF_PojWo.D7_8N4Zn6UGGbw; __mendel=%7B%27pagesViewed%27%3A1%2C%27surveyShown%27%3Afalse%2C%27topicInitialSequence%27%3A0%7D; subreturn=https%3A%2F%2Fwww.britannica.com%2Ferror404; webstats=referer_page=https%3A%2F%2Fwww.britannica.com%2Ferror404'
}r=requests.get("https://www.britannica.com/topic/Wikipedia")html=r.text
bsObj=BeautifulSoup(html)for link in bsObj.findAll("a"):if "href" in link.attrs:print(link.attrs['href'])

 如下:(为爬取成功)

 

但是我们可以发现有一些是我们不需要的,还有一些URL是重复的,如文章链接,页眉,页脚......

1.URL链接不包括#、=、<、>。

2.URL链接是以/wiki/开头的。

深度优先的递归爬虫

如下:

python">import requests
from bs4 import BeautifulSoup
import re
import time#https://www.britannica.com/topic/Wikipediaexist_url=[]#放url
g_writecount=0def scrappy(url,depth=1):global g_writecounttry:headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36','Cookie': '__cf_bm=tib6ICsQJxwj9fpQPz8vhpKt84n0pXOPK6DvV8P8vc4-1713585206-1.0.1.1-3MKOfelDBDRh.z5WLq1ddVtPSuJQ69Ewh9v4Wc.Ljkw9I_G3nUUNOw3W8AG_hXTrF_PojWo.D7_8N4Zn6UGGbw; __mendel=%7B%27pagesViewed%27%3A1%2C%27surveyShown%27%3Afalse%2C%27topicInitialSequence%27%3A0%7D; subreturn=https%3A%2F%2Fwww.britannica.com%2Ferror404; webstats=referer_page=https%3A%2F%2Fwww.britannica.com%2Ferror404'}url='https://www.britannica.com/topic/Wikipedia'+urlr=requests.get(url,headers=headers)html=r.textexcept Exception as e:print('saveing',url)print(e)exist_url.append(url)return Noneexist_url.append(url)link_list=re.findall('<a href="/wiki/([^:#=<>]*?)".*?</a>',html)#去重复urlunique_list=list(set(link_list)-set(exist_url))#放到txt文件里面for eachone in unique_list:g_writecount+=1output="NO."+str(g_writecount)+"\t Depth"+str(depth)+"\t"+url+'->'+eachone+'\n'print(output)with open('link_eqwaak.txt',"a+") as f:f.write(output)if depth<2:scrappy(eachone,depth+1)scrappy("wiki")

url放入link_eqwaak.txt文件里面,直到深度大于或等于2.

下一节我们实现多线程网页爬取,提高代码的执行速度。


http://www.ppmy.cn/embedded/11387.html

相关文章

用栈实现队列(力扣第232题)

#define _CRT_SECURE_NO_WARNINGS 1 #include "assert.h" #include "stdio.h" #include "stdbool.h" #include "stdlib.h" #include "string.h" #define N 10 typedef int STDataType; int data; //静态栈 //typedef struct…

AI检索增强生成引擎-RAGFlow-深度理解知识文档,提取真知灼见

&#x1f4a1; RAGFlow 是什么&#xff1f; RAGFlow是一款基于深度文档理解构建的开源RAG&#xff08;Retrieval-Augmented Generation&#xff09;引擎。RAGFlow个人可以为各种规模的企业及提供一套专业的RAG工作流程&#xff0c;结合针对用户群体的大语言模型&#xff08;LL…

【JS基础知识2】你是不是也傻傻分不清节流和防抖

大家好&#xff0c;我是小梅 作为在前端领域不断探索的一员&#xff0c;最近处于待业状态。现在开始在此记录准备面试的基础知识点。如果你也遇到了相同的问题&#xff0c;希望本文对你有帮助。 节流和防抖的实现&#xff0c;相信大家基本上都是直接使用lodash库提供的方法防抖…

田忌赛马【洛谷P1650】

P1650 田忌赛马 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) #include<iostream> #include <algorithm> #include<cstdio> #include <map> using namespace std; const int N1e5100; int n; map<int,int>a,b;//映射&#xff0c;速度->数量…

数据结构——栈(C++实现)

数据结构——栈 什么是栈栈的实现顺序栈的实现链栈的实现 今天我们来看一个新的数据结构——栈。 什么是栈 栈是一种基础且重要的数据结构&#xff0c;它在计算机科学和编程中扮演着核心角色。栈的名称源于现实生活中的概念&#xff0c;如一叠书或一摞盘子&#xff0c;新添加…

flutter 点击按钮限流方案

文章目录 前言一、理解限流的思想二、flutter实现代码如下&#xff1a;总结 前言 最近写flutter项目&#xff0c;遇到提交表单重复点击问题&#xff0c;下面是解决方案&#xff0c;希望帮助到大家。 一、理解限流的思想 1、限流思想 限流&#xff08;Throttle&#xff09; 限…

面试复试基础题目-数据库相关

维护数据库的完整性&#xff0c;一致性&#xff0c;你喜欢用触发器还是自写业务逻辑&#xff1f;为什么&#xff1f; 尽可能用约束&#xff0c;比如主键、外键、唯一键、非空字段等&#xff0c;具体问题具体分析&#xff0c;数据量巨大的不要用触发器&#xff0c;小的可以用&am…

赛氪网技术支持2024年全国大学生英语竞赛 百万学子踊跃参赛

2024年全国大学生英语竞赛&#xff08;NECCS&#xff09;正如火如荼进行&#xff0c;赛氪网作为本次竞赛线上报名的唯一渠道&#xff0c;以其稳定的技术性能和卓越的技术领导力&#xff0c;为竞赛提供了强有力的技术支持。本次大赛初赛于2024年4月21日&#xff08;星期日&#…