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

陕西网站建设宣传方案云南购物网站建设

陕西网站建设宣传方案,云南购物网站建设,网站logo例子,机械加工网瓦房北方机床附件厂前言 前些天发现了一个巨牛的人工智能学习网站#xff0c;通俗易懂#xff0c;风趣幽默#xff0c;忍不住分享一下给大家#xff1a;https://www.captainbed.cn/z 「个人网站」#xff1a;雪碧的个人网站 ChatGPT体验地址 文章目录 前言爬虫获取cookie网站爬取与启动CS…前言 前些天发现了一个巨牛的人工智能学习网站通俗易懂风趣幽默忍不住分享一下给大家https://www.captainbed.cn/z 「个人网站」雪碧的个人网站 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.tj-hxxt.cn/news/230739.html

相关文章:

  • 一个ip上绑多个网站wordpress难度指数
  • 博物馆设计网站推荐wordpress增加产品
  • 游戏网站建设的策划书北京工商登记服务平台
  • 做网站jijianjianzhan一般网站模块
  • 宁波网站建设运营织梦网站名称
  • 外贸仿牌网站微信公众号创建流程
  • p2p网站建设制作wordpress需要懂什么
  • 佛山市外贸网站建设价格中建集团的重要事件
  • 网站规划书包括哪些方面wordpress个性化
  • 网站创建知识海康域名网站
  • 崇义网站建设公众号登录入口在哪
  • 网站如何去分析windos 下做网站工具
  • 找i满洲做卖房广告不收费的网站网页设计需要学什么语言
  • 泰安网站开发制作公司规划院网站建设书
  • 网站开发与iso9001关系怎么做网站编程
  • 呼和浩特 的网站建设网站建设优化过程中的优化策略
  • 网站开发方向wordpress活动插件
  • 动力启航做网站校园网站建设素材
  • 世纪兴网站建设wordpress怎么放图片不显示
  • 海口免费自助建站模板淘宝关键词优化推广排名
  • 东莞高端网站建设哪个好wordpress侧栏导航栏
  • 网站开发代做东营建设网站公司电话
  • 网站建设的软件是哪个品牌推广策略包括哪些内容
  • 有什么网站可以自己做书网站首页做的好看
  • 电商型网站是否是趋势wordpress网站入口
  • 合肥网站营销网页制作中的常见问题
  • 西安网站建设开发熊掌号临沂网站哪家好
  • 网站开发小组wordpress管理员手册
  • 黄岩建设局台州网站建设为什么不用wordpress
  • 如何安装网站百度关键词搜索量查询