
爬虫
文章平均质量分 91
feiyy404
选择往往比努力更重要。
展开
-
Python 爬取单个知乎问答
问题起源在知乎上看到一个问题: 求推荐好看的二次元头像的。一个个去翻回答感觉有点麻烦。 想把这个问题下全部的图像抓取到文件夹中慢慢选。分析1 找到接口2 json 中有个字段叫 content,是每个回答的 html 页面。 从其中解析出 img 标签中的头像链接3 知乎的反爬注意加上请求头主要代码import jsonimport requestsfrom lxml import htmlheaders = { "User-Agent": "Mozilla/5.0 (M原创 2020-05-25 14:00:23 · 391 阅读 · 0 评论 -
用 python 调用和风天气的 api 爬取天气预报数据
和风天气的天气预报,为个人开发者提供免费的天气预报数据。(有访问次数的限制)。注册开发者账号第一步,我们需要去注册一个开发者账号:网址: https://id.heweather.com/login?redirect=https://console.heweather.com/my/service阅读开发者文档参考:https://dev.heweather.com/docs/getting-started/get-api-key然后我们来看调用的示例代码:没有 python原创 2020-05-18 22:31:15 · 3499 阅读 · 1 评论 -
交易所行情数据采集爬虫
任务描述在每天的盘前以及盘后的时间爬取上交所和深交所发布的当如的行情数据。上交所数据源: http://www.sse.com.cn/market/price/report/深交所数据源: http://www.szse.cn/market/trend/index.html网站更新规律上交所在一天之内,实时更新当天的行情数据。深交所在当天收盘后才会更新当天的数据。上交所行情...原创 2020-05-14 20:39:12 · 3149 阅读 · 0 评论 -
python 爬虫中的字符串处理
参考https://www.cnblogs.com/BlackStorm/p/6359005.html去除字符串中的空白字符(1)空白字符位于左右两边demo_str = ' Lfuruiyang'ret1 = demo_str.lstrip()print(demo_str) print(ret1) (2) 空白字符在中间# 空白字符在中间 import redemo_str = ' Lfuru iyang 'ret1 = re.sub('\s', '', d原创 2020-05-12 15:12:26 · 1177 阅读 · 0 评论 -
全量爬取搜狗词库并且转化为 txt/csv 格式
参考https://blog.youkuaiyun.com/u012424313/article/details/82222188https://www.cnblogs.com/yumingle/p/6675487.htmlhttps://blog.youkuaiyun.com/python36/article/details/83029661下载原始的 scel 词库文件# coding=utf-8impo...原创 2020-04-21 15:02:06 · 1608 阅读 · 0 评论 -
全量爬取百度词库的词条
参考https://zhidao.baidu.com/question/84723766.html批量获取关键词base_url = 'http://baike.baidu.com/view/{}.html'headers = { "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,...原创 2020-04-20 16:13:16 · 2702 阅读 · 0 评论 -
解决 mac 上谷歌浏览器与 selenium 版本不匹配的问题
问题描述使用 selenium 运行程序,报异常:selenium.common.exceptions.SessionNotCreatedException: Message: session not created: This version of ChromeDriver only supports Chrome version 79解决方案在该网址: http://npm.taob...原创 2020-04-17 13:27:19 · 1310 阅读 · 0 评论 -
python schedule 对 corn 的支持
schedule按照官方文档大致可以知有以下的定时规则:每十分钟运行一次schedule.every(10).minutes.do(job)每小时运行一次schedule.every().hour.do(job)每天的 10 点半运行一次schedule.every().day.at("10:30").do(job)每月运行一次schedule.every().monday...原创 2020-04-14 19:45:58 · 647 阅读 · 0 评论 -
url 编解码在Python的实现
原文https://blog.youkuaiyun.com/wf592523813/article/details/79141463URL 需编码&解码原因通常如果一样东西需要编码,说明其并不适合直接传输。原因多种多样,如 size 过大,包含隐私数据。对于 url 来说,之所以要进行编码,是因为 url 中有些字符会引起歧义。例如,url 参数字符串中使用 key=value 键值对这样的形...转载 2020-04-11 15:20:27 · 341 阅读 · 0 评论 -
docker 部署代理池服务
使用 docker 部署代理池服务, 需要使用 redis 服务。通过以下几个步骤启动了 redis 服务 :sudo docker pull redisdocker run -d --name myredis -p 6379:6379 redis运行一段时间之后,发现无法继续向 redis 中插入数据,报错:2020-02-23T05:27:31.793572577Z redis....原创 2020-02-23 13:57:01 · 915 阅读 · 0 评论 -
将原始 javascript 对象转换为 python 字典
转载https://cloud.tencent.com/developer/ask/175357问题说明有的网站的数据是以 js 文件的格式返回的,不符合 Python 中 json 数据的格式。即我们无法使用 json.loads 将其反序列化。正则demjsonimport demjson# fromjs_obj = '{x:1, y:2, z:3}'# topy_o...转载 2020-02-12 22:35:24 · 1208 阅读 · 1 评论 -
scrapy 分布式原理
Scrapy单机架构在本机维护一个爬取队列,Scheduler进行调度。多台主机协作的关键是什么?共享爬取队列。分布式爬虫架构队列用什么维护?Redis,非关系型数据库,Key-Value形式存储,结构灵活。是内存中的数据结构存储系统,处理速度快,性能好。提供队列、集合等多种存储结构,方便队列维护。怎样来去重?Redis 提供集合数据结构,在 Redis 集合中存储每个 ...原创 2020-02-12 22:21:11 · 336 阅读 · 0 评论 -
scrapy 爬取 zhihu user info
创建虚拟环境mkvirtualenv zhuhu创建项目pip install scrapy scrapy startproject Zhihu初始化 git 仓库git init 添加 .gitignore 文件:# .gitignore/.idea*.pyc创建爬虫文件scrapy genspider zhihu zhihu.com代码编写首先我们尝试运行...原创 2020-02-12 22:01:01 · 437 阅读 · 0 评论 -
爬虫多线程爬取大量代理并且检查可用性
代码示例#!/usr/bin/env python#-*- coding:utf-8 -*-"""@author: HJK"""import loggingimport osimport sysimport getoptimport datetimeimport reimport threadingimport platformimport requestsfrom ...原创 2020-02-10 19:55:39 · 426 阅读 · 0 评论 -
创建一个基于pymyql 的 python 客户端类
python 代码实现import pymysqlfrom qq_A_stock.configs import MYSQL_HOST, MYSQL_PORT, MYSQL_USER, MYSQL_PASSWORD, MYSQL_DBclass PyMysqBase(object): def __init__(self, host='localh...原创 2020-02-10 16:54:29 · 228 阅读 · 0 评论 -
关于爬虫中使用了 ip 代理还是被封的一些想法
问题描述最近在爬取一个股票相关的网站,发现即使使用了代理,还是 403 被反了。但是当我更换阿布云付费代理的时候,是 ok 的。解决过程找到一篇文章: https://www.zhiliandaili.com/News-getInfo-id-159.html首先我想的是我的代理是不是质量不好,不是高匿的。检验高匿代理搜索如何判断 ip 是高匿代理,找到了一些测试方案 :htt...原创 2020-02-07 14:51:12 · 2395 阅读 · 1 评论 -
爬虫获取免费代理
使用说明import jsonimport pprintimport randomimport sysimport timeimport requestsfrom fake_useragent import UserAgentfrom bs4 import BeautifulSoupua = UserAgent()class ProxySpider(object): ...原创 2020-02-07 11:30:14 · 533 阅读 · 0 评论 -
伪装请求头-简单实用的fake-useragent库
使用说明# 测试一个生成伪装请求头的模块from fake_useragent import UserAgentua = UserAgent()# 查看 ua 的属性attrs = [attr for attr in dir(ua) if not attr.startswith("_")]# print(attrs)# ['cache', 'data', 'data_browsers...原创 2020-02-07 09:59:54 · 1426 阅读 · 0 评论 -
用锁解决 redis 中的共享资源竞争
redis共享资源竞争解决方案分布式锁的实现原理使用 Python 实现锁原创 2020-02-04 21:34:19 · 496 阅读 · 0 评论 -
在爬虫中基于redis实现的几种队列
队列基类#!/usr/bin/env python# -*- encoding: utf-8 -*-# vim: set et sw=4 ts=4 sts=4 ff=unix fenc=utf8:# Author: Binux<roy@binux.me># http://binux.me# Created on 2015-04-27 22:48:04im...原创 2020-02-04 21:27:58 · 597 阅读 · 0 评论 -
爬虫中的请求管理概述
请求管理要做哪些事情请求去重管理:防止发出重复请求请求缓冲管理:临时存储请求请求调度管理: 派遣并控制调度请求,请求优先级管理请求去重管理请求去重的判断依据:请求方法请求地址 urlurl 的查询参数请求体去重方案:基于信息摘要算法求指纹去重基于布隆过滤器的去重请求数据处理统一大小写url 查询参数排序请求体排序(data)相关的代码实现首先封装一个...原创 2020-02-04 20:19:43 · 293 阅读 · 0 评论 -
爬虫中的布隆过滤器
布隆过滤器的原理简单理解布隆过滤器的实现原理如下:# 简单表示布隆过滤器的实现原理 # 计算布隆过滤器的长度# 假如是我们使用了一个 256 M 的布隆过滤器# 那么现在我们来计算这个过滤器的长度import hashliblength = 256 * 1024 * 1024 * 8print(length) # 2147483648# 当我们对于某个值进行 md5 去特...原创 2020-02-04 17:54:40 · 659 阅读 · 0 评论 -
simhash 介绍以及应用场景
简介simhash 算法是一种局部敏感的哈希算法,能实现相似文本内容的去重。与信息摘要算法的区别信息摘要算法:如果两者原始内容只相差一个字节,所产生的签名也很有可能差别很大。simhash 算法: 如果原始内容只相差一个字节,所产生的签名差别非常小。simhash值的对比: 通过两者的 simhash 值的二进制位的差异来表示原始文本内容的差异。差异的个数又被称为海明距离。注意:si...原创 2020-02-04 16:59:20 · 1826 阅读 · 2 评论 -
爬虫中几种去重过滤器的 python 实现
去重过滤器基类# 基于信摘要算法进行去重判断以及存储# 1. 基于内存的存储# 2. 基于redis的存储# 3. 基于mysql的存储import siximport hashlibclass BaseFilter(object): """基于信息摘要算法进行数据的去重以及判断""" def __init__(self, hash_func_name='md...原创 2020-02-04 11:12:03 · 695 阅读 · 0 评论 -
爬虫计算数据特征值之信息摘要 hash 算法
几种常见的原始数据特征值的计算信息摘要 hash 算法simhash 算法布隆过滤器方式信息摘要 hash 算法介绍可以将任意长度的文本、字节数据,通过一个算法得到一个固定长度的文本。例如 md5 (128位)、sha1(160位) 等。只要源文本不一样,计算的带的结果必然不同。(摘要)主要用于对比信息源是否一致,而且通常要比源小很多,所以可称之为摘要。正因此,利用信息摘要算法...原创 2020-02-03 11:59:25 · 556 阅读 · 0 评论 -
爬虫去重思路
爬虫中什么业务需要使用去重1 防止发出重复的请求2 防止存储重复的数据去重实现的基本原理根据给定的判断依据和给定的去重容器,将原始数据逐一进行判断,判断去重容器中是否有该数据。如果没有就将该数据对应的判断依据加入去重容器中,同时标记该数据不是重复数据。否则不添加同时标记该数据为重复数据。判断依据: (原始数据,原始数据特征值)去重容器: (存储判断依据)根据原始数据进行去重判断根...原创 2020-02-03 11:06:48 · 350 阅读 · 0 评论 -
解决在docker 中部署 selenium 服务,服务需要启动时间的问题
问题描述当我们在 docker 中启动了 selenium 服务的时候,有时候当我们的爬虫服务已经启动,但是 selenium 服务尚在准备阶段的时候,有可能会报出服务拒绝的异常。解决思路一种解决的方案是我们在调用服务之前强制睡眠一段时间,等待服务完全准备好再进行连接。这种方案的不优雅之处在于当我们有多个服务需要调度的时候,睡眠的时间间隔是很难确定和把控的。另外的思路就是去请求 selen...原创 2020-02-03 09:25:30 · 554 阅读 · 1 评论 -
破解网站简单 js 加密 (二)
反向推导_0x344cd4()验证:原始的 js 代码:使用 Python 代码进行替换和验证:_0x412a72(_0x2a28c0)将函数进行替换,可以知道原创 2020-01-18 18:12:42 · 393 阅读 · 0 评论 -
破解网站简单 js 加密 (一)
问题描述准备工作首先将浏览器设置为禁止 js 加载的模式:我们再次去请求相关的网站的时候就看不到 js 动态加载之后内容了。正向推理对于 script 里面的代码,第一段是一个 eval 函数的调用。 第二行是一大段的代码,先将第一段的代码复制出来,在控制台将 eval 替换为 console.log 即可。我们将运行的结果复制下来:var dynamicurl="/WZWS...原创 2020-01-19 12:13:01 · 1211 阅读 · 0 评论 -
在 mac 上安装 ChromeDriver
查看浏览器的版本下载对应版本的安装包https://chromedriver.storage.googleapis.com/index.html放在环境变量所在的路径中查看 mac 的环境变量:我就移动到其中的 /usr/bin 中了:不允许, 试试 /user/local/bin可以的。测试配置完成后,就可以在命令行下直接执行 chromedriver 命令了:如...原创 2019-12-31 17:43:56 · 339 阅读 · 0 评论 -
什么是XHR数据
如果我们爬取的数据是动态的, 就需要关注 XHR 数据。因为动态页面的原理就是通过原生的 XHR 对象发出 HTTP 请求,得到服务器返回的数据之后,再进行处理。XHR 会用于在后台与服务器交换数据。我们需要使用浏览器的插件查看 XHR数据,比如在 Chrome 浏览器中使用开发者工具。有时候,网页会使用 js 请求数据,那么只有 js 都加载完成之后,我们才能获取完整的 HTML 文件。XP...原创 2019-12-31 11:30:27 · 1500 阅读 · 0 评论 -
不编程的爬虫抓取工具
火车采集器网址: http://www.locoy.com/火车采集器已经有 13 年历史了,是老牌的采集工具。它不仅可做抓取工具,也可以做数据清洗、分析、挖掘已经可视化等工作。数据源适用于绝大多数的网页,网页中能看到的内容都可以通过采集规则进行抓取。八爪鱼网址: https://www.bazhuayu.com/八爪鱼也是知名的采集工具,它有两个版本,一个是免费的采集模板,还有一个是云...原创 2019-12-31 10:44:39 · 831 阅读 · 0 评论 -
scrapy + shedule: signal only works in main thread?
报错说明使用定时任务模块 shedule 跑 scrapy 爬虫程序, 报错:报错信息: signal only works in main thread改了个形式,运行完一次直接退出了:参考https://www.zhihu.com/question/53799671...原创 2019-12-30 16:56:49 · 845 阅读 · 1 评论 -
爬虫 js 时间戳处理
前后端对接的时候,最好使用同一的时间戳 ,这样两边的处理更加灵活。在爬虫项目中,当我们拿到了某个数据 item 的时间字段,有可能是以 js 时间戳的格式存储的。 我们在入库的时间需要做一定的准换,转换为 python 中的时间格式,进一步转换为适合插入 mysql 中的时间格式。首先我们检查下时间是否和页面显示时间一致:然后在 Python 程序中将这个时间戳转换为 datetime ...原创 2019-12-30 10:12:46 · 2081 阅读 · 0 评论 -
爬虫技巧 --图片文字混采,图片位置替换为 url 字符串
# -*- coding: utf-8 -*-import pprintimport requests as reqimport refrom bs4 import BeautifulSoupurl = "https://www.taoguba.com.cn/Article/2336826/1"content = req.get(url).texts_html = re.find...原创 2019-12-27 15:15:49 · 467 阅读 · 0 评论 -
东方财经财富号爬虫流程(4) -- ip 代理池组件
组件ip 代理组件作为一个单独的公共模块方便复用:ip 代理对象将每一个 ip 代理抽象为一个类:ProxyPool初始化爬取将 爬取 ip 的实现委托给 proxy_strategy (GetProxyStrategy 类的实例)。爬取并且定期的健康检查随机选取可用 ipGetProxyStrategy真正解析网站获取 ip 的类。 如果我们买了自己的 ip ...原创 2019-12-19 10:20:28 · 318 阅读 · 0 评论 -
东方财经财富号爬虫流程(3) --在项目中对于账号等敏感信息的处理
创建 .env 文件将 .env 设置为不提交读取 .env 配置为环境变量测试是否读到在 pycharm 等 IDE 中同样可以设置环境变量。更新时间: 2019-12-19原创 2019-12-19 10:07:46 · 251 阅读 · 0 评论 -
东方财经财富号爬虫流程(2) -- mongo 工具的创建
这一篇主要是用来做一些公共组件。mongomongo 数据库用来保存代理 ip;连接 mongo连接 mongo 具体数据库连接集合基本功能之插入数据完善配置信息以及测试不过,正式提交的时候在代码的页脚写测试最好是不要。更新时间: 2019-12-19...原创 2019-12-19 09:42:58 · 225 阅读 · 0 评论 -
东方财经财富号爬虫流程(1) -- 基本结构搭建
创建项目目录# 创建虚拟环境并且进入 $ workon dog # 查看是否创建成功 $ ls# 进入项目文件夹 $ cd EastMoneyBusiness# 初始化项目仓库 $ git init添加 git 相关文件主要是 对项目设置缓存模式设置不遵守 robots 协议创建爬虫# business 是爬虫文件以及爬虫项目的名称 # so.eas...原创 2019-12-18 18:45:29 · 271 阅读 · 0 评论 -
request的基本特性
发送请求导入模块发送get请求:>>> import requests>>> r = requests.get('https://api.github.com/events')假设我们有一个名字叫做r的Response对象 发送pos请求的时候的key和value是一个字典:r = requests.post('http://http...转载 2018-07-18 23:40:16 · 953 阅读 · 0 评论