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

东莞浩智网站建设多少钱wordpress 判断语句

东莞浩智网站建设多少钱,wordpress 判断语句,西宁今天最新官方消息,有了域名和云主机怎么做网站前言 前些天发现了一个巨牛的人工智能学习网站#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.hkea.cn/news/14461694/

相关文章:

  • 贵州企业网站建设设计专业的英文网站建设
  • 新余百度网站建设wordpress 登陆信息
  • 网站建设08网站建设需求表
  • 巴中建设银行网站西安搬家公司哪家服务好还实惠
  • 北京建设规划许可证网站黑帽seo软件
  • 怎么做一个网站送给女朋友海南百度推广代理商
  • 新华书店网站建设网站建设和考核工作通知
  • 江西建设银行分行网站二级建造师报考条件官网
  • 如何创建个人网站模板华为手机软文范文300
  • 何为网站开发用层还是表格做网站快
  • 网站制作优化排名中山seo关键词
  • 最好用的系统优化软件许昌seo推广
  • 爱有声小说网站捡个校花做老婆哪个网站可以做销售记录
  • 衣服网站建设规划书便捷网站建设推荐
  • 做视频后期的网站html5网站搭建
  • 南京网站制作域名常州市建设工程交易网
  • wordpress没有文章导航网站seo优化
  • 大型房产网站模板网站关键词排名外包
  • 网站 推广 实例中国建设劳动学会是正规网站吗
  • 网站建设与代运营介绍网站维护升级访问
  • 清远医疗网站建设湖北专业的网站制作代理商
  • 机械外贸网站建设html期末作业网页代码
  • 系统花钱做任务的小说魅网站wordpress改插件
  • 做外汇网站代理dw网页设计官网
  • 公司网站推广费用全自动建站系统
  • 江苏山海连云建设有限公司网站广州建设工程中心网站
  • 杭州做网站的公司排行发稿时间是什么意思
  • 怎么开发微信网站网站 运营
  • 建设论坛网站需要做什么潍坊网站建设兼职
  • 清水河网站建设广州 建 网站