- 博客(21)
- 资源 (1)
- 收藏
- 关注
原创 使用scrapy爬取知乎问题和答案的相关字段完整代码
目前程序健壮性有待提高。尤其是对question的各类异常处理还不够。但是代码已经可用,附上代码运行后爬取到的数据。在爬取到101条quetion时已经爬取到2671条answer字段了。。。。这差距好大。一方面是因为answer有知乎提供的API,更方便爬取,另一个方面就是question的好多异常情况我没有处理,碰到这些异常时就不会写入数据库。这是我今后需要思考,提高的方向。暂时就这样子。ma...
2018-02-13 22:03:20 1962
原创 处理爬取知乎问题时的一些异常
在这三个地方打断点,尤其是failure这打断点特别重要,会告诉我们错误信息。调试了一会,我发现question中有一种情况是只提出问题,没有对这个问题进行描述,就是content为空这种情况。例如下图这种看了下自己content的css选择器,再打开web调试器,搜索一下,发现如下图这个css还可以用,只是内容为空。所以也就比较方便处理这个异常。我在item.py中定义一个处理None的函数,如...
2018-02-13 21:53:33 1621
原创 爬取知乎question时遇到了问题
经过前几天的学习,知乎爬虫的逻辑已经实现。代码如下zhihu.py# -*- coding: utf-8 -*-import reimport jsonimport datetimetry: import urlparse as parseexcept: from urllib import parseimport scrapyfrom scrapy.loade...
2018-02-13 10:41:35 1797
原创 在保存数据到mysql中的一点小麻烦
现在要保存知乎的数据到mysql中,就意味着要重写pipeline来处理所有的item,或者每个网站各有一个pipeline,但是这样子如果有上百个网站,就得写对应数量的pipeline,要向mysql发出上百个连接,显然不合理。并且在同一个twistedpipeline中,只有插入语句是变化的,所以根据不同的item,构建不同的sql语句并插入到mysql中。参考别人的做法,仿照Django中的...
2018-02-11 22:08:20 637
原创 知乎爬虫逻辑的实现以及answer的提取
打开上一篇分析过的answer接口的json文件这样子我们就可以很方便的提取出answer中的具体字段。如下 def parse_answer(self, reponse): #处理questiona的answer ans_json = json.loads(reponse.text) is_end = ans_json["paging"]["...
2018-02-11 20:56:01 1786
原创 item loader方式提取知乎question
首先获取问题url,如图。发现url是在a标签下的href,所以使用css选择器即可得到。但是在这里,看到后面的url并不是完整的url,缺少主域名,这时就要用到urllib中的parse,将主域名与上述url连接起来。做个测试,发现可以。如下图但是为了防止爬到javascript,还是需要对url做过滤,使用filter.代码如下在这么多url中,我只对问题url感兴趣,所以要做正则表达式的匹配...
2018-02-11 17:58:31 494
原创 知乎分析以及数据表的设计
打开知乎,随便点击一片文章,发现下列这些数字。那么如何爬取呢?知乎提供了一个API,点击查看全部回答在点击前,我们先打开WEB-IDE,选择网络。然后点击查看全部回答,注意观察网络。如下图所示。复制这个请求网址并打开。发现如下接下来就设计我所需要的数据库,注意建立数据库时要注意字符集和排序规则,为了显示中文,应该如下图一样接下来就是设计问题表,和回答表,字段如下。...
2018-02-11 14:59:05 4098
转载 知乎网问题和答案爬取
本文转载自https://www.jianshu.com/p/7e31c1cbfa6f三、知乎网问题和答案爬取1. 基础知识session和cookie机制cookie:浏览器支持的存储方式key-valuehttp无状态请求,两次请求没有联系<img src=”http://upload-images.jianshu.io/upload_images/1779926-f01f9c33e57
2018-02-11 13:07:12 4618 1
原创 selenium模拟登录知乎
Selenium是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。支持的浏览器包括IE(7, 8, 9, 10, 11),Mozilla Firefox,Safari,Google Chrome,Opera等。这个工具的主要功能包括:测试与浏览器的兼容性——测试你的应用程序看是否能够很好得工作在不同浏览器和操作系统之上。测试系统功能——创建回归测...
2018-02-09 15:41:07 1872 1
原创 HTTP状态码
201-206都表示服务器成功处理了请求的状态代码,说明网页可以正常访问。 200(成功) 服务器已成功处理了请求。通常,这表示服务器提供了请求的网页。 201(已创建) 请求成功且服务器已创建了新的资源。 202(已接受) 服务器已接受了请求,但尚未对其进行处理。 203(非授权信息) 服务器已成功处理了请求,但返回了可能来自另...
2018-02-09 10:55:14 462
原创 最小生成元
如果x加上x的各个数字之和得到y,就说x是y的生成元。给出n(1≤n≤100000),求最小生成元。无解输出0。例如,n=216,121,2005时的解分别为198,0,1979。#include<stdio.h>#include<string.h>#define maxn 100005/*一次性枚举100000以内的所有整数,并标记 m加上m的各个数字之和得到...
2018-02-08 21:10:05 655
原创 teX中的引号
在TeX中,左双引号是“``”,右双引号是“''”。输入一篇包含双引号的文章,你的任务是把它转换成TeX的格式。样例输入:"To be or not to be," quoth the Bard, "thatis the question".样例输出:``To be or not to be,'' quoth the Bard, ``thatis the question''分析:使用getcha...
2018-02-08 20:31:33 460
原创 蛇形填数
在n×n方阵里填入1,2,…,n×n,要求填成蛇形。例如,n=4时方阵为:10 11 12 19 16 13 28 15 14 37 6 5 4上面的方阵中,多余的空格只是为了便于观察规律,不必严格输出。n≤8。分析:从1开始依次填写。设“笔”的坐标为(x,y),则一开始x=0,y=n-1,即第0行,第n-1列(行列的范围是0~n-1,没有第n列)。“笔”的移动轨迹是:下,下,下,左,左,左,上,...
2018-02-08 20:03:51 423
原创 开灯问题
开灯问题。有n盏灯,编号为1~n。第1个人把所有灯打开,第2个人按下所有编号为2的倍数的开关(这些灯将被关掉),第3个人按下所有编号为3的倍数的开关(其中关掉的灯将被打开,开着的灯将被关闭),依此类推。一共有k个人,问最后有哪些灯开着?输入n和k,输出开着的灯的总数和编号。k≤n≤1000。#include <stdio.h>#include <string.h>#de...
2018-02-08 19:27:41 272
转载 POJ1061青蛙的约会
本文转载自http://blog.csdn.net/sun897949163/article/details/51894372Language:Default青蛙的约会Time Limit: 1000MSMemory Limit: 10000KTotal Submissions: 105002Accepted: 20595Description两只青蛙在网上相识了,它们聊得很开心,于是觉得很有必要见
2018-02-07 19:58:10 232
原创 POJ1163 The Triangle
思路:这题就是从上到下找一条值最大的路径,动态规划题。从下往上推,相邻的两个数中找较大的与上层相加,得出的结果相邻的两个数中再找较大的与上层相加,以此类推。用二维数组arr[][]记录从下到该点的最大值。最后的结果就是arr[0][0]AC代码:#include <stdio.h>#define MAXSIZE 105int main(){ int n; ...
2018-02-07 13:34:06 223
原创 POJ1005 I Think I Need a Houseboat
思路:用(X,Y)可求出半径,就可以求出半圆面积,再除以50,就可以求得所需年数。AC代码:#include<stdio.h>#include<math.h>#define pi 3.1415927int main(){ int i=1,n; int year; double x,y,radius,area; scanf("%d",&n);...
2018-02-06 19:45:00 224
原创 POJ1003 Hangover
题意说的是,给出一个数,让你求出满足 1/2+1/3+...+1/(n+1)的值大于这个数的最小的n.......循环累加就可以了............ #include<stdio.h>int cnt(double x){ double s=0; int i=2; while(s<x) { s+=1.0/(i*1.0); ++i; } r...
2018-02-05 14:33:40 223
原创 POJ 1004 - Financial Management
这是道水题,然而却也容易出错。例如下面这段代码,看起来没什么问题, #include<stdio.h>int main(){ int i;double t,sum=0; for(i=1;i<=12;i++){ scanf("%lf",&t); sum+=t; } printf("$%0.2lf",sum/12);}但却是WA,正确的A...
2018-02-05 13:11:35 395
原创 通过自定义pipeline保存数据到mysql
首先安装mysqlclient包,推荐使用豆瓣源安装,速度不仅快,还不容易出错。pip install -i https://pypi.douban.com/simple/ mysqlclient# -*- coding: utf-8 -*-# Define your item pipelines here## Don't forget to add your pipeline
2018-02-02 20:29:23 1920
TermExtractorRelated
2020-10-04
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人