- 博客(30)
- 收藏
- 关注
原创 scrapy中添加cookie踩坑记录(源码分析)
问题发现:前段时间项目中,为了防止被封号(提供的可用账号太少),对于能不登录就可以抓取的内容采用不带cookie的策略,只有必要的内容才带上cookie去访问。本来想着很简单:在每个抛出来的Request的meta中带上一个标志位,通过在CookieMiddleware中查看这个标志位,决定是否是给这个Request是否装上Cookie。实现的代码大致如下:class CookieMiddleware(object): """ 每次请求都随机从账号池中选择一个账号去访问 ""
2020-11-17 00:27:42
667
原创 Java泛型笔记
泛型的使用可以避免编写过多的冗余代码,相对于之前的使用Object类来说,更加健壮(类型安全),将类型的强转放到了编译期(之前类型的检查和类型的强转都必须由程序员自己负责),减少了很多由于类型转换出现的运行时错误的出现。Java中的泛型有两种应用,一种是泛型类,另外一种是泛型方法。关于泛型的一些内容,可以参考这篇博客:https://blog.csdn.net/s10461/article/details/53941091 ,总结的比较详细。这里主要想记录一下关于泛型的擦除机制,事实上,在JVM中是看
2020-11-14 11:20:55
312
原创 关于Thread.join()方法的理解
之前在学习Java多线程的时候,对join方法理解是:在调用B线程的join方法之后,其他线程只有在B线程执行完毕之后才能执行,但是最近看源码并不是这样的,而是调用B.join()的线程会在B线程执行完毕之后才能执行,其他线程会与B线程交替进行。下面是jdk8中的关于join方法的实现:public final synchronized void join(long millis)throws InterruptedException { long base = System.currentT
2020-10-29 10:05:49
424
原创 scrapy_redis源码分析(一):RedisSpider类(自定义初始请求)
scrapy_redis框架的RedisSpider类和RedisMixin类源码分析,自定义初始请求
2020-07-24 22:49:33
1268
原创 Win10下安装docker--尽量避免踩坑
Win10家庭版好像是不行的,所以最好使用win10专业版。1、如果你是Intel处理器,最好先在BIOS里开启如下两项:都是Enabled,如果是Disabled,需要改成Enabled然后保存再启动。这个一定要的!!!!2、开启Hyper-V服务右键开始按钮–>应用和功能–>右上角的 程序和功能–>左侧的 启动或关闭Windows功能-确保这是是勾选上的,然后点击确定,会提示重启,重启之后,下载安装docker-desktop就可以了。docker-desktop:h
2020-07-03 22:00:18
4755
原创 IDEA Web项目:java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
今天使用IDEA编写一个使用jdbc的小demo的时候,明明已经将jdbc的jar包导入到项目中,但是启动之后依然提示:java.lang.ClassNotFoundException: com.mysql.jdbc.Driver。纯写一个java测试类,正常连接没有问题,但是在tomcat中启动的时候就不行了。看了一个9年之前的博客,将jdbc的jar包放到tomcat的lib目录下就可以了,重新启动tomcat之后,完美解决。但是随后就在考虑,为什么明明把jar包导入到lib文件夹了,部署的时候找不
2020-06-21 19:07:10
492
原创 在线程中启动scrapy以及多次启动scrapy报错的解决方案(ERROR:root:signal only works in main thread)
最近项目遇到一个问题,需要设置一个监听线程,来监听消息队列,当收到消息的时候,需要启动相应的爬虫代码,执行抓取操作。提供了一个线程中启动scrapy以及在一运行环境下重复启动scrapy报错的解决方案。
2020-06-01 18:21:00
2016
2
原创 Python实现查找第K小元素(上)--快排思想
今天抽时间实现的是查找第KKK小元素算法。问题描述:给定线性序集中nnn个元素和一个整数k(1<=k<=n)k (1<=k<=n)k(1<=k<=n),要求找出这nnn个元素中第kkk小的元素。对于这个问题,一般可以直接想到的方法就是,先对这nnn个数字进行排序,然后直接选取第k个元素,排序算法可以用我们之前实现过的归并排序或者快速排序,这样实现的算法时间复...
2019-12-05 00:12:23
4122
2
原创 Python实现归并排序(合并排序)
这两天在复习算法考试,抽着时间实现了一下里面的代码,今天实现的是使用了分治思想的归并排序算法(合并排序)。
2019-12-01 23:19:43
1525
原创 LeetCode(12)-Python-整数转罗马数字(integer-to-roman)
题目描述罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。例如, 罗马数字 2 写做 II ,即为两个并列的 1。12 写做 XII ,即为 X + II 。 27 写做 XXVII, 即为 XX + V + II 。通常情况下,罗马数字中小的数字在大的数字的右边。但也存在特例,例如 4 不写做 IIII,而是 IV。数字 1 在数字 5 的左边,所表示的数等于大数 5 ...
2019-10-11 11:25:51
412
原创 LeetCode(11)-Python-盛最多水的容器(container-with-most-water)
题目描述给定 n 个非负整数 a1,a2,...,ana_1,a_2,...,a_na1,a2,...,an,每个数代表坐标中的一个点 (i,ai)(i, a_i)(i,ai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0)。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。说明:你不能倾斜容器,且 n 的值至少为 2。...
2019-10-02 17:06:21
301
原创 LeetCode(9)-Python-回文数(palindrome-number)
题目描述判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。示例输入: 121输出: true输入: -121输出: false解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。输入: 10输出: false解释: 从右向左读, 为 01 。因此它不是一个回文数。解题思路判断一个整数是否是一个回文...
2019-09-30 17:36:13
645
原创 Python实现快速排序(非递归实现)
快速排序同样也是分治的思想,核心依然是分而治之,各个击破。快速排序的思想是:找到一个数字x,对数组nums进行排序,使x左侧的数字都小于x,右侧的数字都大于x,然后对左侧和右侧重复同样的操作,直到所有的数字都已按序排列。根据上面的思想,实现代码如下:#QuickSort:used the divide and conquer idea to sort arraydef QuickSort(...
2019-09-25 11:38:01
1245
原创 Python实现二分查找(折半查找)
我们在学习编程语言或者算法设计的时候,总是绕不过查找算法和排序算法。对于顺序查找和冒泡查找我们应该是最熟悉的了,如果这两个还不会,真的要加把劲儿了。刚好最近算法老师在讲分治思想,刚好二分查找就是根据分治思想进行设计的。在有序数组nums中查找一个数字x,顺序查找的方法是将数组nums中的元素一个一个与x进行比较,时间复杂度为O(n)O(n)O(n)。二分查找的主要思想是:充分利用数组nums...
2019-09-23 18:56:59
694
原创 LeetCode(8)-Python-字符串转换整数(atoi)
题目描述请你来实现一个 atoi 函数,使其能将字符串转换成整数。首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止。当我们寻找到的第一个非空字符为正或者负号时,则将该符号与之后面尽可能多的连续数字组合起来,作为该整数的正负号;假如第一个非空字符是数字,则直接将其与之后连续的数字字符组合起来,形成整数。该字符串除了有效的整数部分之后也可能会存在多余的字符,这些字...
2019-09-22 09:24:28
438
原创 LeetCode(7)-Python-整数反转(reverse-integer/submissions)
题目描述给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。示例输入: 123输出: 321输入: -123输出: -321要求假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−231,231−1][−2^{31}, 2^{31} − 1][−231,231−1] 。请根据这个假设,如果反转后整数溢出那么就返回 0。解题思路我们观察题目...
2019-09-16 17:30:43
216
原创 LeetCode(6)-Python-Z 字形变换(zigzag-conversion)
题目描述将一个给定字符串根据给定的行数,以从上往下、从左到右进行 Z 字形排列。比如输入字符串为 “LEETCODEISHIRING” 行数为 3 时,排列如下:L C I RE T O E S I I GE D H N之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:“LCIRETOESIIGEDHN”。示例输入: s = “LEETCOD...
2019-09-12 21:57:15
544
原创 递归算法学习笔记
递归概念任何可以用计算机求解的问题所需的计算时间都与其规模有关,问题的规模越小,解题所需的计算时间往往也越短,从而比较容易处理。直接或者间接调用自身的算法称为递归算法,用函数自身给出定义的函数称为递归函数。使用递归技术往往使函数的定义和算法的描述简捷且易于理解,有些数据结构,如二叉树等,由于其本身固有的递归特性,特别适合用递归的形式来描述。当我们设计递归算法时,应满足三点:①符合递归的描述:需...
2019-09-07 19:11:07
1144
原创 BeautifulSoup-4.2使用笔记
参考文档:Beautiful Soup 4.2.0 中文文档本文仅为常用的方法总结,内容来自官方文档,这里只是做了摘选,完整的内容还请查看官方文档。BeautifulSoup是一个可以从html或者xml文件中提取数据的一个Python第三方库。我们可以在编写爬虫项目的时候,使用BeautifulSoup来帮助我们解析html文件。文章目录1、安装BeautifulSoup2、安装解析器3、...
2019-09-03 09:22:36
1338
原创 LeetCode(5)-Python-最长回文子串(longest-palindromic-substring)
题目描述给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。示例 1:输入: “babad”输出: “bab”注意: “aba” 也是一个有效答案。示例 2:输入: “cbbd”输出: “bb”解决思路1回文字符串,就是顺序读取和逆序读取的结果是一样的,比如“上海自来水来自海上”,我们在判断回文字符串的时候,可以认为回文字符串都是有一个中心的...
2019-05-25 17:49:43
2799
5
原创 LeetCode(4)-Python-寻找两个有序数组的中位数(median-of-two-sorted-arrays)
题目描述给定两个大小为 m 和 n 的有序数组 nums1 和 nums2。请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n))。你可以假设 nums1 和 nums2 不会同时为空。示例 1:nums1 = [1, 3]nums2 = [2]则中位数是 2.0示例 2:nums1 = [1, 2]nums2 = [3, 4]则中位数是 (2...
2019-01-27 14:54:43
978
原创 LeetCode(3)-Python-无重复字符的最长子串(longest-substring-without-repeating-characters)
题目描述给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。示例 1:输入: “abcabcbb”输出: 3解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。示例 2:输入: “bbbbb”输出: 1解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。示例 3:输入: “pwwkew”输出: 3解释: 因为无重复字符的最长子串是 “w...
2019-01-16 10:45:29
398
原创 LeetCode(2)-Python-两数相加(add-two-numbers)
题目描述:给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。您可以假设除了数字 0 之外,这两个数都不会以 0 开头。示例:输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)输出:7 -> 0 ...
2019-01-07 16:50:18
462
原创 LeetCode(1)-Python-两数之和(two-sum)
题目描述给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。示例:给定 nums = [2, 7, 11, 15], target = 9因为 nums[0] + nums[1] = 2 + 7 = 9所以返回 [0, 1]解题思路1:...
2018-12-30 17:37:13
382
原创 Python3爬虫(5)--获取知乎用户的粉丝
在上个爬虫中我们通过本地的四六级考生信息获取对应的成绩,这次我们主要是获取知乎用户的粉丝的相关信息存储在数据库中,数据库依然采用的是mysql数据库。这次爬取的是知乎上“余弦”的粉丝,我们在这个之前会先模拟登陆,然后研究内容的获取。模拟登陆不多说了,和登录科大信息门户的类似,这边直接附上代码#获取_xsrf的值 def collect(self): reponse=urlli
2017-03-27 14:38:49
1821
原创 Python3爬虫(4)--抓取考生的四六级成绩
本文主要写的是利用本地的四六级考生的相关信息,我们通过爬虫将这些信息在四六级考试成绩网上进行查询,然后将考生的成绩保存在本地的过程。由于四六级考生的信息不便透露,本文只是提供了一个思路。我们使用的是中国高等教育学生信息网(http://www.chsi.com.cn/cet/)作为我们查询的相关网站。我们打开网站之后,看到的如下面的界面 通过这个查询界面,我们可以知道大概要提交的参数,一个是准
2017-03-14 09:39:56
5891
原创 Python3爬虫(3)--爬取电子科大学生成绩
本文主要是写一个爬取学生成绩的一个小爬虫,我们在这中间要使用cookie的相关内容,登录到UESTC信息门户网站。在登陆到信息门户网站的时候我们可以通过火狐浏览器的httpfox插件查看postdata得到我们所要post的数据内容 但是当我们将这些内容post到目标网站时,发现并不能得到需要返回的页面,原因在于It是一个随时间变动所生成的一个字符串,我们需要先获取这个字符串,只需要将此段字符串切
2016-11-26 11:02:15
2596
原创 python3爬虫(2)--爬取糗事百科页面
在上一个python爬虫爬取百度百科有关python词条的100个页面的例子中,这次我们要爬取的是糗事百科的24小时热门页面的每个段子的内容,点赞数和评论数,对于爬取糗事百科和百度百科的主要不同在于糗事百科需要我们模拟浏览器登陆,普通的登陆并不会返回我们想要的内容,我们一起探讨一下。我们先按照爬取百度百科的方式获取一下糗事百科的页面信息import urllib.requesturl='http:/
2016-10-13 18:39:17
1169
原创 python3爬虫(1)--百度百科的页面爬取
新手起步,准备用写博客的形式记录下自己的学习路程,我用的是python3.5 ,大家互相学习,多多讨论这个对于百度百科的爬取往往作为python爬虫的第一课,慕课上有这个教程的视频(请看这里),博主只是记录一下我的学历历程。对于一些基础不扎实的朋友呢,建议先看一下廖雪峰老师的python课程(传送门),其实博主的基本功也不扎实,在写这段代码的时候有时候也会去看两眼,多练习,多动手就好了言归正传,爬
2016-10-06 22:49:55
1403
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人