当前位置: 首页 > news >正文

免费的域名注册搜云seo

免费的域名注册,搜云seo,安徽网站推广系统,wordpress项目管理插件前言 「作者主页」#xff1a;雪碧有白泡泡 「个人网站」#xff1a;雪碧的个人网站 ChatGPT体验地址 文章目录 前言爬虫获取cookie网站爬取与启动CSDN爬虫爬虫启动将爬取内容存到文件中 多线程爬虫选择要爬取的用户 线程池 爬虫 爬虫是指一种自动化程序#xff0c;能够模…前言 「作者主页」雪碧有白泡泡 「个人网站」雪碧的个人网站 ChatGPT体验地址 文章目录 前言爬虫获取cookie网站爬取与启动CSDN爬虫爬虫启动将爬取内容存到文件中 多线程爬虫选择要爬取的用户 线程池 爬虫 爬虫是指一种自动化程序能够模拟人类用户在互联网上浏览网页、抓取网页内容、提取数据等操作。爬虫通常用于搜索引擎、数据挖掘、网络分析、竞争情报、用户行为分析等领域。 我们以爬取某个用户的博文列表并存储到文件中实现多线程爬虫为例带大家体验爬虫的魅力 获取cookie 首先我们在爬取网站的时候首先获取cookie 拿我的博客主页为例用F12打开控制台点击网络找到cookie 创建一个cookie文件复制进去 然后从给定的cookie_path文件中读取cookie信息并将其存储在一个字典中。函数返回这个字典。 具体如下 def get_headers(cookie_path:str): cookies {} with open(cookie_path, r, encodingutf-8) as f: cookie_list f.readlines() for line in cookie_list: cookie line.split(:) cookies[cookie[0]] str(cookie[1]).strip() return cookies网站爬取与启动 CSDN爬虫 class CSDN(object): def init(self, username, folder_name, cookie_path): # self.headers { # User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.70 Safari/537.36 # } self.headers get_headers(cookie_path) self.s requests.Session() self.username username self.TaskQueue TaskQueue() self.folder_name folder_name self.url_num 1headers: 这是一个字典用于存储请求头信息。s: 这是一个会话对象用于保持与CSDN网站的连接。username: 这是一个字符串表示CSDN用户的用户名。TaskQueue: 这是一个任务队列对象用于管理待访问的URL。folder_name: 这是一个字符串表示保存爬取结果的文件夹名称。_name: 这是一个整数表示当前保存的文件夹编号。_num: 这是一个整数表示当前爬取的页面编号。 爬虫启动 def start(self):num 0articles [None]while len(articles) 0:num 1url uhttps://blog.csdn.net/ self.username /article/list/ str(num)response self.s.get(urlurl, headersself.headers)html response.textsoup BeautifulSoup(html, html.parser)articles soup.find_all(div, attrs{class:article-item-box csdn-tracking-statistics})for article in articles:article_title article.a.text.strip().replace( ,)article_href article.a[href]with ensure_memory(sys.getsizeof(self.TaskQueue.UnVisitedList)):self.TaskQueue.InsertUnVisitedList([article_title, article_href])初始化一个变量num用于表示当前访问的文章页码。初始化一个列表articles用于存储待处理的文章信息。使用一个while循环当articles列表中的文章数量大于0时执行循环体。更新num变量表示当前访问的文章页码。构造一个URL该URL包含当前用户名、文章列表和页码。使用requests库发送请求并获取响应。使用BeautifulSoup库解析HTML内容并提取相关的文章信息。遍历提取到的文章列表提取文章标题和链接。将文章标题和链接插入到任务队列TaskQueue的未访问列表中。 将爬取内容存到文件中 打印爬取开始的信息。计算并获取存储博文列表的文件路径。使用open函数以写入模式打开文件并设置文件编码为utf-8。写入文件头包括用户名和博文列表。遍历任务队列TaskQueue中的未访问列表将每篇文章的标题和链接写入文件。在每篇文章标题和链接之间添加一个空行以提高可读性。更新一个变量_num用于表示当前已写入的文章序号。 代码如下 def write_readme(self):print(*100)print([] 开始爬取 {} 的博文 .......format(self.username))print(*100)reademe_path result_file(self.username,file_nameREADME.md,folder_nameself.folder_name)with open(reademe_path,w, encodingutf-8) as reademe_file:readme_head # self.username 的博文\nreademe_file.write(readme_head)for [article_title,article_href] in self.TaskQueue.UnVisitedList[::-1]:text str(self.url_num) . [ article_title ]( article_href )\nreademe_file.write(text)self.url_num 1self.url_num 1列表文件生成之后我们要对每一个链接进行处理 def get_all_articles(self):try:while True:[article_title,article_href] self.TaskQueue.PopUnVisitedList()try:file_name re.sub(r[\/:*?|],-, article_title) .mdartical_path result_file(folder_usernameself.username, file_namefile_name, folder_nameself.folder_name)md_head # article_title \nmd md_head self.get_md(article_href)print([] 正在处理URL{}.format(article_href))with open(artical_path, w, encodingutf-8) as artical_file:artical_file.write(md)except Exception:print([----] 处理URL异常{}.format(article_href))self.url_num 1except Exception:pass从任务队列TaskQueue中弹出未访问的文章链接和标题。尝试获取一个文件名该文件名由文章标题生成以避免文件名中的特殊字符。计算并获取存储文章的文件路径。创建一个Markdown文件头包括文章标题。获取文章内容并将其添加到Markdown文件头。将处理后的Markdown内容写入文件。打印正在处理的URL。更新一个变量_num用于表示已处理的文章数量。 多线程爬虫 实现多线程爬虫以提高爬取速度。在循环中会不断地创建新的线程来处理任务队列中的任务直到任务队列为空。这样可以充分利用计算机的多核性能提高爬取效率。 def muti_spider(self, thread_num):while self.TaskQueue.getUnVisitedListLength() 0:thread_list []for i in range(thread_num):th threading.Thread(targetself.get_all_articles)thread_list.append(th)for th in thread_list:th.start()我们在多线程爬虫的时候要保证系统有足够的内存空间。通过使用contextlib库的contextmanager装饰器可以轻松地实现上下文管理确保内存分配和释放的正确性。 lock threading.Lock() total_mem 1024 * 1024 * 500 #500MB spare memory contextlib.contextmanager def ensure_memory(size):global total_memwhile 1:with lock:if total_mem size:total_mem- sizebreaktime.sleep(5)yield with lock:total_mem size在__enter__方法中使用with lock语句模拟加锁确保在执行内存分配操作时不会发生竞争条件。然后判断当前系统的总内存是否大于所需分配的内存空间如果大于则减少总内存并跳出循环。 选择要爬取的用户 def spider_user(username: str, cookie_path:str, thread_num: int 10, folder_name: str articles):if not os.path.exists(folder_name):os.makedirs(folder_name)csdn CSDN(username, folder_name, cookie_path)csdn.start()th1 threading.Thread(targetcsdn.write_readme)th1.start()th2 threading.Thread(targetcsdn.muti_spider, args(thread_num,))th2.start()检查文件夹folder_name是否存在如果不存在则创建该文件夹。创建一个CSDN对象csdn用于模拟用户登录和爬取文章。创建一个线程th1目标为_readme。创建一个线程th2目标为_spider并传入参数(thread_num,)用于指定线程数量。 这个函数的目的是爬取指定用户的CSDN博客文章并将文章保存到文件夹folder_name中。通过创建线程可以实现多线程爬虫提高爬取速度。 线程池 线程池存储爬虫代理 IP 的数据库或集合。在网络爬虫中由于目标网站可能会针对同一 IP 地址的访问频率进行限制因此需要使用池来存储多个代理 IP 地址以实现 IP 地址的轮换和代理。池可以提高爬虫的稳定性和效率避免因为 IP 地址被封禁而导致的爬虫失效。 爬虫和池是爬虫领域中不可或缺的概念池能够提高爬虫的稳定性和效率同时帮助爬虫更好地适应目标的反爬虫策略。
http://www.zqtcl.cn/news/300621/

相关文章:

  • 青岛网站建设seo优化wordpress分类标题自定义
  • 网站开发本地环境在海南注册公司需要多少钱
  • 济南网站开发去哪儿旅行app下载安装
  • 大城 网站北京做网站男生工资
  • 赣州网站建设百家号免费软件网
  • 在合肥做网站多少钱网站开发外包平台
  • 百度指数查询平台网站建设SEO优化哪家好
  • 网站怎么在成都备案中企动力如何
  • 免费数据统计网站app推广拉新一手渠道
  • 网站推广效果不好原因zac seo博客
  • 高端网站设计合肥网站建设个人网站建设公
  • 廊坊建站模板系统做效果图的网站
  • 建网站打开需要验证四川省成都市建设厅官网
  • 网站文章列表如何排版珠海建设工程信息网站
  • 郑州个人做网站建设银行招聘网站
  • 杭州网站设计公司联系亿企邦网站怎么上百度
  • 网站建设的未来网站不备案访问
  • 网站改版效果图怎么做网站建设的五个基本要素
  • 河南建站网站做o2o网站需要多少钱
  • 重庆企业网站定制开发公司wordpress用户页
  • 电子商务网站seo网站规划与设计方向
  • 外贸双语网站源码wordpress 柚子
  • 隆昌市住房和城乡建设厅网站html5网页成品代码
  • 泉州丰泽建设局网站wordpress设置logo和公司名
  • 网页与网站设计实验总结网上商城互联网网站开发
  • 学院宣传网站建设简介郑州加盟网站建设
  • 上海网站建设sheji021wordpress ssl 图片
  • 网站管理人员队伍建设说明材料搞笑网站建设目的和意义
  • 网站建设应该考虑哪些问题如何规划网站栏目
  • 照片网站模版广告设计软件哪个好用