<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>技术博客 on UZPENG</title><link>https://UZPENG.github.io/categories/%E6%8A%80%E6%9C%AF%E5%8D%9A%E5%AE%A2/</link><description>Recent content in 技术博客 on UZPENG</description><generator>Hugo -- gohugo.io</generator><language>zh</language><copyright>© 2026 UZPENG</copyright><lastBuildDate>Fri, 13 Feb 2026 15:55:45 +0800</lastBuildDate><atom:link href="https://UZPENG.github.io/categories/%E6%8A%80%E6%9C%AF%E5%8D%9A%E5%AE%A2/index.xml" rel="self" type="application/rss+xml"/><item><title>Vibe Coding时代我们应该做些什么</title><link>https://UZPENG.github.io/posts/living_under_vibe_coding/</link><pubDate>Fri, 13 Feb 2026 15:55:45 +0800</pubDate><guid>https://UZPENG.github.io/posts/living_under_vibe_coding/</guid><description>&lt;h2 class="relative group"&gt;前言
 &lt;div id="前言" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e5%89%8d%e8%a8%80" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;由于大模型的出现，软件开发产生了革命性的变化，当前&lt;code&gt;prompt+Agent&lt;/code&gt;的使用大大提升了开发效率，欢迎来到 &lt;code&gt;Vibe Coding&lt;/code&gt; 时代！&lt;/p&gt;</description></item><item><title>漫谈博客来时路</title><link>https://UZPENG.github.io/posts/talk_about_my_old_blog/</link><pubDate>Sun, 25 Jan 2026 07:47:20 +0800</pubDate><guid>https://UZPENG.github.io/posts/talk_about_my_old_blog/</guid><description>&lt;h2 class="relative group"&gt;前言
 &lt;div id="前言" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e5%89%8d%e8%a8%80" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;在重启博客之际，回顾自己7年前的老博客，不由心生感慨：“撒老师，我没白活！”&lt;/p&gt;</description></item><item><title>重启博客杂谈</title><link>https://UZPENG.github.io/posts/restart_blog/</link><pubDate>Fri, 28 Nov 2025 23:04:01 +0800</pubDate><guid>https://UZPENG.github.io/posts/restart_blog/</guid><description>&lt;h2 class="relative group"&gt;为什么一直没有更新博客
 &lt;div id="为什么一直没有更新博客" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e4%b8%ba%e4%bb%80%e4%b9%88%e4%b8%80%e7%9b%b4%e6%b2%a1%e6%9c%89%e6%9b%b4%e6%96%b0%e5%8d%9a%e5%ae%a2" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;翻了翻自己的博客记录，最新一篇博客是2018年11月，距离现在已经7年有余了。18年那会才刚毕业，也就是说毕业这么多年，博客从来没有更新过。&lt;/p&gt;</description></item><item><title>Java并发编程入门</title><link>https://UZPENG.github.io/posts/concurrent/</link><pubDate>Sat, 03 Nov 2018 00:00:00 +0000</pubDate><guid>https://UZPENG.github.io/posts/concurrent/</guid><description>&lt;h1 class="relative group"&gt;前言
 &lt;div id="前言" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e5%89%8d%e8%a8%80" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h1&gt;
&lt;blockquote&gt;&lt;p&gt;历史博客已归档，关于web架构的解读和导读详情见&lt;a href="https://UZPENG.github.io/posts/talk_about_my_old_blog/" &gt;《漫谈博客来时路》&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;a这篇文章其实是我很久之前总结的，因为之前的笔记都比较零碎，现在统一将他迁移到博客。学习Java并发编程强烈推荐两本书，一本是&lt;a href="https://book.douban.com/subject/10484692/" target="_blank" rel="noreferrer"&gt;《Java并发编程实战》&lt;/a&gt;，另一本是&lt;a href="https://book.douban.com/subject/25844475/" target="_blank" rel="noreferrer"&gt;《Java7 并发实战手册》&lt;/a&gt;。&lt;/p&gt;
&lt;p&gt;第一本书的作者里面有 Joshua Bloch ，这位大牛可是Java Current类库的作者之一哦，类库作者亲手写的书就足够成为你看它的理由啦。Anyway，这本书对并发的理论真的讲得很好，从竞态条件、原子性到内存逸出、乐观锁、悲观锁，内容十分全面，我觉得是每一个Java程序必读的书目，可以帮助你系统地学习Java并发的知识。&lt;/p&gt;
&lt;p&gt;Java并发编程实战固然好，但是对于计算机基础薄弱的人来说，很多概念还是略显苦涩。如果你是这样的人的话，不妨先读一下Java7并发编程实战手册。Cook Cook Book嘛，跟着敲代码就行了，另外书中还会介绍一下并发的场景，都是对于新手很友好的哦~&lt;/p&gt;</description></item><item><title>Linux-IO多路复用-SELECT/POLL/EPOLL</title><link>https://UZPENG.github.io/posts/io-multiplexing/</link><pubDate>Sun, 02 Sep 2018 00:00:00 +0000</pubDate><guid>https://UZPENG.github.io/posts/io-multiplexing/</guid><description>&lt;blockquote&gt;&lt;p&gt;本文翻译自&lt;code&gt;DEVELPERS AREA&lt;/code&gt;的&lt;a href="http://devarea.com/linux-io-multiplexing-select-vs-poll-vs-epoll" target="_blank" rel="noreferrer"&gt;LINUX – IO MULTIPLEXING – SELECT VS POLL VS EPOLL&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h1 class="relative group"&gt;前言
 &lt;div id="前言" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e5%89%8d%e8%a8%80" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h1&gt;
&lt;blockquote&gt;&lt;p&gt;历史博客已归档，关于web架构的解读和导读详情见&lt;a href="https://UZPENG.github.io/posts/talk_about_my_old_blog/" &gt;《漫谈博客来时路》&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;众所周知，在linux的世界里，一切皆文件。每一个进程都拥有一张文件描述符的表，指向文件、socket、硬件还有一些操作系统对象。&lt;/p&gt;
&lt;p&gt;典型的拥有很多IO源的系统都会有一个初始化的阶段，然后进入待机模式——等待客户端请求并且响应。&lt;/p&gt;
&lt;p&gt;最简单的解决方案就是为每一个客户端创建一个线程（或者进程），一直阻塞直到请求发送或者写入了响应。这种模式在客户端数量很小的时候可以工作，但是我们想要扩展到成千上万的客户端，为每个客户端创建线程（或者进程）是一个很糟糕的主意。&lt;/p&gt;

&lt;h1 class="relative group"&gt;IO多路复用
 &lt;div id="io多路复用" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#io%e5%a4%9a%e8%b7%af%e5%a4%8d%e7%94%a8" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h1&gt;
&lt;p&gt;问题的解决方案是使用内核机制去轮询一系列的文件描述符。在linux系统下，主要有以下三种选择：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;select(2)&lt;/li&gt;
&lt;li&gt;poll(2)&lt;/li&gt;
&lt;li&gt;epoll&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;以上三种方法的思想都是一致的，新建一系列的文件描述符，告诉内核你对每一个描述符的操作，然后使用线程去阻塞一个函数调用直到至少有一个文件描述符请求的操作是可用的。&lt;/p&gt;</description></item><item><title>linux常用命令速查</title><link>https://UZPENG.github.io/posts/linux-command/</link><pubDate>Wed, 22 Aug 2018 00:00:00 +0000</pubDate><guid>https://UZPENG.github.io/posts/linux-command/</guid><description>&lt;h1 class="relative group"&gt;前言
 &lt;div id="前言" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e5%89%8d%e8%a8%80" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h1&gt;
&lt;blockquote&gt;&lt;p&gt;历史博客已归档，关于编程武器的解读和导读详情见&lt;a href="https://UZPENG.github.io/posts/talk_about_my_old_blog/" &gt;《漫谈博客来时路》&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;记录一些linux的常用操作以便查询，暂时先记录，以后有时间再分门别类。&lt;/p&gt;</description></item><item><title>git常用操作汇总</title><link>https://UZPENG.github.io/posts/git/</link><pubDate>Wed, 01 Aug 2018 00:00:00 +0000</pubDate><guid>https://UZPENG.github.io/posts/git/</guid><description>&lt;h2 class="relative group"&gt;用户初始化
 &lt;div id="用户初始化" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e7%94%a8%e6%88%b7%e5%88%9d%e5%a7%8b%e5%8c%96" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;blockquote&gt;&lt;p&gt;历史博客已归档，关于编程武器的解读和导读详情见&lt;a href="https://UZPENG.github.io/posts/talk_about_my_old_blog/" &gt;《漫谈博客来时路》&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;git config &amp;ndash;global user.name &lt;code&gt;&amp;lt;your name&amp;gt;&lt;/code&gt;&lt;br&gt;
git config &amp;ndash;global user.password &lt;code&gt;&amp;lt;your password&amp;gt;&lt;/code&gt;&lt;br&gt;
ssh-keygen 生成秘钥&lt;br&gt;
vim ~/.ssh/authorized_keys 添加客户端秘钥&lt;br&gt;
cat ~/.ssh/id_rsa.pub 输出公钥&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;su git #切换用户
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo chsh -s /usr/bin/git-shell 更改登录的shell脚本&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;</description></item><item><title>常用软件汇总</title><link>https://UZPENG.github.io/posts/software/</link><pubDate>Wed, 01 Aug 2018 00:00:00 +0000</pubDate><guid>https://UZPENG.github.io/posts/software/</guid><description>&lt;h1 class="relative group"&gt;常用软件汇总
 &lt;div id="常用软件汇总" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e5%b8%b8%e7%94%a8%e8%bd%af%e4%bb%b6%e6%b1%87%e6%80%bb" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h1&gt;

&lt;h2 class="relative group"&gt;前言
 &lt;div id="前言" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e5%89%8d%e8%a8%80" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;blockquote&gt;&lt;p&gt;历史博客已归档，关于编程武器的解读和导读详情见&lt;a href="https://UZPENG.github.io/posts/talk_about_my_old_blog/" &gt;《漫谈博客来时路》&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;因为可能经常换电脑，或者电脑重装系统，所以经常需要重装软件，记录一下使用的软件及其下载地址是很有必要的，方便日后查阅。&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;以下下载链接都是win下的版本，暂时没收录其他系统。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 class="relative group"&gt;开发工具
 &lt;div id="开发工具" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e5%bc%80%e5%8f%91%e5%b7%a5%e5%85%b7" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;软件&lt;/th&gt;
					&lt;th&gt;功能&lt;/th&gt;
					&lt;th&gt;下载地址&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;idea Community&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Java开发IDE&lt;/td&gt;
					&lt;td&gt;&lt;a href="https://www.jetbrains.com/idea/download" target="_blank" rel="noreferrer"&gt;下载地址&lt;/a&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;JDk&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Java开发工具&lt;/td&gt;
					&lt;td&gt;&lt;a href="https://www.oracle.com/technetwork/java/javase/downloads/index.html" target="_blank" rel="noreferrer"&gt;下载地址&lt;/a&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;MySQL&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;数据库&lt;/td&gt;
					&lt;td&gt;&lt;a href="https://dev.mysql.com/downloads/" target="_blank" rel="noreferrer"&gt;下载地址&lt;/a&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;XShell&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;终端&lt;/td&gt;
					&lt;td&gt;&lt;a href="https://www.netsarang.com/download/free_license.html" target="_blank" rel="noreferrer"&gt;下载地址&lt;/a&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;XFTP&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;FTP客户端&lt;/td&gt;
					&lt;td&gt;&lt;a href="https://www.netsarang.com/download/free_license.html" target="_blank" rel="noreferrer"&gt;下载地址&lt;/a&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;git&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;git客户端&lt;/td&gt;
					&lt;td&gt;&lt;a href="https://git-scm.com/downloads" target="_blank" rel="noreferrer"&gt;下载地址&lt;/a&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;vscode&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;编辑器&lt;/td&gt;
					&lt;td&gt;&lt;a href="https://code.visualstudio.com/download" target="_blank" rel="noreferrer"&gt;下载地址&lt;/a&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;postman&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;模拟HTTP请求工具&lt;/td&gt;
					&lt;td&gt;&lt;a href="https://www.getpostman.com/apps" target="_blank" rel="noreferrer"&gt;下载地址&lt;/a&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;fiddler&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;HTTP抓包工具&lt;/td&gt;
					&lt;td&gt;&lt;a href="https://www.telerik.com/download/fiddler" target="_blank" rel="noreferrer"&gt;下载地址&lt;/a&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;frp&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;反代工具&lt;/td&gt;
					&lt;td&gt;&lt;a href="https://github.com/fatedier/frp" target="_blank" rel="noreferrer"&gt;下载地址&lt;/a&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;shadowsocks&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;正向代理工具&lt;/td&gt;
					&lt;td&gt;&lt;a href="https://github.com/shadowsocks/shadowsocks-windows/releases" target="_blank" rel="noreferrer"&gt;下载地址&lt;/a&gt;&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;</description></item><item><title>Ngnix+Tomcat+MySQL项目部署</title><link>https://UZPENG.github.io/posts/deploy-doc/</link><pubDate>Wed, 20 Jun 2018 00:00:00 +0000</pubDate><guid>https://UZPENG.github.io/posts/deploy-doc/</guid><description>&lt;h1 class="relative group"&gt;前言
 &lt;div id="前言" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e5%89%8d%e8%a8%80" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h1&gt;
&lt;blockquote&gt;&lt;p&gt;历史博客已归档，关于web架构的解读和导读详情见&lt;a href="https://UZPENG.github.io/posts/talk_about_my_old_blog/" &gt;《漫谈博客来时路》&lt;/a&gt;&lt;/p&gt;</description></item><item><title>postfix+dovecot搭建自己的邮件服务器</title><link>https://UZPENG.github.io/posts/mail/</link><pubDate>Tue, 06 Mar 2018 00:00:00 +0000</pubDate><guid>https://UZPENG.github.io/posts/mail/</guid><description>&lt;h2 class="relative group"&gt;前言
 &lt;div id="前言" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e5%89%8d%e8%a8%80" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;blockquote&gt;&lt;p&gt;历史博客已归档，关于编程武器的解读和导读详情见&lt;a href="https://UZPENG.github.io/posts/talk_about_my_old_blog/" &gt;《漫谈博客来时路》&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;我对于邮箱理解，在很长一段时间里，都是qq邮箱、163邮箱、126邮箱等等的各种第三方邮箱。这些邮箱都是注册一下，然后从web页面登陆进去，就可以收发邮件了。后来上了计算机网络这门课，学习到了有关于邮件的一些协议比如SMTP、POP3、IMAP。但是，当时也只是知道有这几种协议，也没有去实践过，现在想起来真的觉得计算机各方面知识自己都实践得太少了。而且最近在学习java web开发，想着实现一个邮件发送验证码的功能，同时又想拥有一个自己的域名邮箱，所以就决定配置一下邮件服务器。&lt;/p&gt;</description></item><item><title>scrapy+selenium+headless-chrome爬虫总结</title><link>https://UZPENG.github.io/posts/scrapy/</link><pubDate>Mon, 05 Mar 2018 00:00:00 +0000</pubDate><guid>https://UZPENG.github.io/posts/scrapy/</guid><description>&lt;h2 class="relative group"&gt;前言
 &lt;div id="前言" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e5%89%8d%e8%a8%80" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;blockquote&gt;&lt;p&gt;历史博客已归档，关于爬虫的解读和导读详情见&lt;a href="https://UZPENG.github.io/posts/talk_about_my_old_blog/" &gt;《漫谈博客来时路》&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;久闻&lt;code&gt;scrapy&lt;/code&gt;大名，一直想找机会了解一下这框架，在兴趣的驱动下学习了一下简单的&lt;code&gt;scrapy&lt;/code&gt;的使用。虽然上次用java做的一个爬虫，但是后来觉得也算不上什么爬虫吧，只能算模拟&lt;code&gt;http&lt;/code&gt;请求和&lt;code&gt;http&lt;/code&gt;响应的处理、&lt;code&gt;json&lt;/code&gt;的序列化和反序列化、excel文件的读取和写入而已，很多爬虫需要处理的东西也并没有处理。
但是&lt;code&gt;scrapy&lt;/code&gt;就不一样了，作为一个成熟的爬虫框架，scrapy有以下几点优势。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;内嵌了CSS选择器和XPath解析器用于提取HTML/XML的信息。&lt;/li&gt;
&lt;li&gt;提供了一个shell控制台用于测试css和xpath的表达式。&lt;/li&gt;
&lt;li&gt;良好的架构设计：middleware、pipeline。&lt;/li&gt;
&lt;li&gt;成熟的请求调度器。&lt;/li&gt;
&lt;/ol&gt;
&lt;blockquote&gt;&lt;p&gt;备注: 以上特性来自于&lt;a href="https://doc.scrapy.org/en/latest/intro/overview.html" target="_blank" rel="noreferrer"&gt;scrapy官方文档&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;scrapy还有很多其他的特性，我在实践中比较常用的就是上面这几项。&lt;/p&gt;
&lt;p&gt;另外，上次爬取动态页面的时候，采取的策略是分析AJAX请求的URL然后自己构造请求。这种方法比较麻烦，需要自己去分析请求，这次我们采用selenium+headless-chrome，以浏览器自动化的方式爬取数据。&lt;/p&gt;</description></item><item><title>爬虫实践--淘数据网站的数据爬取和存储</title><link>https://UZPENG.github.io/posts/crawl/</link><pubDate>Tue, 26 Dec 2017 00:00:00 +0000</pubDate><guid>https://UZPENG.github.io/posts/crawl/</guid><description>&lt;h2 class="relative group"&gt;背景
 &lt;div id="背景" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e8%83%8c%e6%99%af" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;blockquote&gt;&lt;p&gt;历史博客已归档，关于爬虫的解读和导读详情见&lt;a href="https://UZPENG.github.io/posts/talk_about_my_old_blog/" &gt;《漫谈博客来时路》&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;最近女朋友需要利用&lt;code&gt;tableau&lt;/code&gt;来做数据可视化的作业，要做数据可视化，那首先可定得要有数据。她们打算用八爪鱼等爬虫软件来抓取数据，结果没成功，原因不明。然后跟我吐槽了一下这个事情，刚好我最近也要学爬虫，本着项目驱动学习的理念，就直接选择了这个项目来练手了。&lt;/p&gt;

&lt;h2 class="relative group"&gt;准备工作
 &lt;div id="准备工作" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e5%87%86%e5%a4%87%e5%b7%a5%e4%bd%9c" aria-label="锚点"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;编程环境：&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;IntelliJ IDEA 2017.1.5
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Build #IU-171.4694.70, built on July 4, 2017
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Licensed to weapon
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;JRE: 1.8.0_112-release-736-b21 amd64
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;JVM: OpenJDK 64-Bit Server VM by JetBrains s.r.o
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Windows 10 10.0&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;编程环境如上所示，因为我Java语言比较熟悉，所以编程语言选择了Java。虽然Java做爬虫语法上面比较累赘，但是Python还没学会，就凑合着用Java写了。&lt;/p&gt;</description></item><item><title>我的博客之旅</title><link>https://UZPENG.github.io/posts/start/</link><pubDate>Sat, 04 Mar 2017 19:31:34 +0800</pubDate><guid>https://UZPENG.github.io/posts/start/</guid><description>&lt;blockquote&gt;&lt;p&gt;V2版本已发布，详情见&lt;a href="https://UZPENG.github.io/posts/restart_blog/" &gt;《重启博客杂谈》&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;似乎自己从来都没有写过博客，能稍微沾上边的就初中的时候写qq空间的日志吧，感觉已经是半个世纪前的事情了。然后现在为什么又想写博客了呢？原因主要有以下几个。&lt;/p&gt;</description></item></channel></rss>