scrapy

Scrapy爬取豆瓣图书数据并写入MySQL

家住魔仙堡 提交于 2020-05-05 23:27:51
项目地址 BookSpider 介绍 本篇涉及的内容主要是获取分类下的所有图书数据,并写入MySQL 准备 Python3.6、Scrapy、Twisted、MySQLdb等 演示 代码 一、创建项目 scrapy startproject BookSpider #创建项目 scrapy genspider douban book.douban.com #创建豆瓣爬虫 二、创建测试类(main.py) from scrapy.cmdline import execute execute(['scrapy', 'crawl', 'douban']) 三、修改配置(spiders/settings.py) USER_AGENT = 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36' #浏览器 ROBOTSTXT_OBEY = False #不遵循豆瓣网站的爬虫协议 四、设置爬取的分类(spiders/douban.py) start_urls = ['https://book.douban.com/tag/神经网络'] # 只测试爬取神经网络 五、获取分类列表页图书数据 from scrapy.http import

爬虫遇到IP访问频率限制的解决方案

跟風遠走 提交于 2020-05-05 15:13:03
背景: 大多数情况下,我们遇到的是访问频率限制。如果你访问太快了,网站就会认为你不是一个人。这种情况下需要设定好频率的阈值,否则有可能误伤。如果大家考过托福,或者在12306上面买过火车票,你应该会有这样的体会,有时候即便你是真的用手在操作页面,但是因为你鼠标点得太快了,它都会提示你: “操作频率太快...”。 遇到这种网页,最直接的办法是限制访问时间。例如每隔5秒钟访问一次页面。但是如果遇到聪明一点的网站,它检测到你的访问时间,这个人访问了几十个页面,但是每次访问都刚好5秒钟,人怎么可能做到这么准确的时间间隔?肯定是爬虫,被封也是理所当然的!所以访问时间间隔你可以设定为一个随机值,例如0到10之间的随机秒数。 当然,如果遇到限制访问频率的网站,我们使用Selenium来访问就显得比较有优势了,因为Selenium这个东西打开一个页面本身就需要一定的时间,所以我们因祸得福,它的效率低下反而让我们绕过了频率检查的反爬虫机制。而且Selenium还可以帮我们渲染网页的JavaScript,省去了人工分析JavaScript源代码的麻烦,可谓一举两得。 下面是我经常使用的修改访问频率的几种场景,供大家参考: 1、Request 单机版爬虫: 上面的代码可以放在request请求之后 2、scrapy 单机版爬虫或者scrapy_redis分布式爬虫 在这里设置请求间隔时间,其他参数的讲解

新浪微博python爬虫分享(一天可抓取 1300 万条数据),超级无敌

梦想与她 提交于 2020-05-04 09:28:06
直接进入主题 爬虫功能: 此项目和QQ空间爬虫类似,主要爬取新浪微博用户的个人信息、微博信息、粉丝和关注(详细见此)。还要注意:不管你是为了Python就业还是兴趣爱好,记住:项目开发经验永远是核心,如果你没有2020最新python入门到高级实战视频教程,可以去小编的Python交流.裙 :七衣衣九七七巴而五(数字的谐音)转换下可以找到了,里面很多新python教程项目,还可以跟老司机交流讨教! 代码获取新浪微博Cookie进行登录,可通过多账号登录来防止新浪的反扒(用来登录的账号可从淘宝购买,一块钱七个)。 项目爬的是新浪微博wap站,结构简单,速度应该会比较快,而且反扒没那么强,缺点是信息量会稍微缺少一些(可见爬虫福利:如何爬wap站)。 爬虫抓取微博的速度可以达到 1300万/天 以上,具体要视网络情况,我使用的是校园网(广工大学城校区),普通的家庭网络可能才一半的速度,甚至都不到。 环境、架构: 开发语言:Python2.7 开发环境:64位Windows8系统,4G内存,i7-3612QM处理器。 数据库:MongoDB 3.2.0 (Python编辑器:Pycharm 5.0.4;MongoDB管理工具:MongoBooster 1.1.1) 主要使用 scrapy 爬虫框架。 下载中间件会从Cookie池和User-Agent池中随机抽取一个加入到spider中。

python爬虫随笔(2)—启动爬虫与xpath

谁说我不能喝 提交于 2020-05-04 07:44:04
启动爬虫 在上一节中,我们已经创建好了我们的scrapy项目,看着这一大堆文件,想必很多人都会一脸懵逼,我们应该怎么启动这个爬虫呢? 既然我们采用cmd命令创建了scrapy爬虫,那就得有始有终有逼格,我们仍然采用程序员的正统方式——cmd的方式运行它 scrapy crawl jobbole 当我们在cmd中输入这条命令后,我们的爬虫也就开始运行了。但是如果每次都需要这样才能启动,不仅费时费力,也难以在IDE中调试程序。面对这种情况,我们可以采取使用python来实现自动命令行的启动。好吧,真香! 于是我们在我们的项目中创建一个main.py文件 编写以下代码 # Author :Albert Shen # -*- coding: utf-8 -*- from scrapy.cmdline import execute import sys import os if __name__ == '__main__': sys.path.append(os.path.dirname(os.path.abspath(__file__))) execute(["scrapy", "crawl", "jobbole"]) 运行main.py,我们就会发现,scrapy成功开始运行,并将运行结果输出到了console窗口,此时我们也就可以充分利用IDE的优势,进行便捷的调试与运行。 初尝爬虫

手把手教你使用Python爬取西刺代理数据(下篇)

核能气质少年 提交于 2020-05-03 15:02:26
/1 前言/ 前几天小编发布了 手把手教你使用Python爬取西次代理数据(上篇) ,木有赶上车的小伙伴,可以戳进去看看。今天小编带大家进行网页结构的分析以及网页数据的提取,具体步骤如下。 /2 首页分析及提取/ 首先进入网站主页,如下图所示。 简单分析下页面,其中后面的 1 是页码的意思,分析后发现每一页有100 多条数据,然后网站底部总共有 2700+页 的链接,所以总共ip 代理加起来超过 27 万条数据,但是后面的数据大部分都是很多年前的数据了,比如 2012 年,大概就前 5000 多条是最近一个月的,所以决定爬取前面100 页。通 过网站 url 分析,可以知道这 100 页的 url 为: 规律显而易见,在程序中,我们使用一个 for 循环即可完整这个操作: 其中 scrapy 函数是爬取的主要逻辑,对应的代码为: 通过这个方式,我们可以得到每一页的数据。 /3 网页元素分析及提取/ 接下来就是对页面内的元素进行分析,提取其中的代理信息。 如上图,我们目的是进行代理地域分布分析,同时,在爬取过程中需要使用爬取的数据进行代 理更新,所以需要以下几个字段的信息: Ip 地址、端口、服务器位置、类型 为此,先构建一个类,用于保存这些信息: 这样,每爬取一条信息,只要实例化一个 ProxyBean 类即可,非常方便。 接下来就是提取元素过程了,在这个过程我使用了正则表达式和

Error 403 : HTTP status code is not handled or not allowed in scrapy

浪子不回头ぞ 提交于 2020-05-02 04:23:17
问题 This is the code, I have written to scrape justdial website. import scrapy from scrapy.http.request import Request class JustdialSpider(scrapy.Spider): name = 'justdial' # handle_httpstatus_list = [400] # headers={'User-Agent': "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/22.0.1207.1 Safari/537.1"} # handle_httpstatus_list = [403, 404] allowed_domains = ['justdial.com'] start_urls = ['https://www.justdial.com/Delhi-NCR/Chemists/page-1'] # def start

Error 403 : HTTP status code is not handled or not allowed in scrapy

喜你入骨 提交于 2020-05-02 04:20:52
问题 This is the code, I have written to scrape justdial website. import scrapy from scrapy.http.request import Request class JustdialSpider(scrapy.Spider): name = 'justdial' # handle_httpstatus_list = [400] # headers={'User-Agent': "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/22.0.1207.1 Safari/537.1"} # handle_httpstatus_list = [403, 404] allowed_domains = ['justdial.com'] start_urls = ['https://www.justdial.com/Delhi-NCR/Chemists/page-1'] # def start

国内某Python大神自创完整版,系统性学习Python

早过忘川 提交于 2020-05-01 16:30:11
1.很多小伙伴纠结于这个一百天的时间,我觉得完全没有必要,也违背了我最初放这个大纲上来的初衷,我是觉得这个学习大纲还不错,自学按照这个来也能相对系统的学习知识,而不是零散细碎的知识最后无法整合,每个人的基础以及学习进度都不一样,没有必要纠结于一百天这个时间,甭管你是用三个月还是用一年来学习这些东西,最后学到了不就是收获吗?何必纠结于这一百天,觉得这一百天学习不完我就放弃了呢?(另,项目后面没有更新完,大家可以按照这个框架去学习,没有更新完的大家可以自行找资料。) 给初学者的几个建议: Make English as your working language. Practice makes perfect. All experience comes from mistakes. Don't be one of the leeches. Either stand out or kicked out. 下面是这个一百天计划里面的学习框架,我在这里放上来。 Day01~15 - Python语言基础 Day01 - 初识Python Python简介 - Python的历史 / Python的优缺点 / Python的应用领域 搭建编程环境 - Windows环境 / Linux环境 / MacOS环境 从终端运行Python程序 - Hello, world / print函数 /

【python网络爬虫】之requests相关模块

拟墨画扇 提交于 2020-05-01 07:24:11
python网络爬虫的学习第一步    【python网络爬虫】之0 爬虫与反扒 【python网络爬虫】之一 简单介绍 【python网络爬虫】之二 python uillib库 【python网络爬虫】之三 requests模块 【python网络爬虫】之四 数据解析的三种方式 【python网络爬虫】之五 requests模块的cookie和代理操作 【python网络爬虫】之六 selenuim和phantonJs处理网页动态加载数据的爬取 【python 网络爬虫】之scrapy系列 更新中。。。 来源: oschina 链接: https://my.oschina.net/u/4381479/blog/3852208

解决PIP下载安装速度慢【Python】

雨燕双飞 提交于 2020-05-01 06:20:01
[TOC] 解决PIP下载安装速度慢 于Python开发用户来讲,PIP安装软件包是家常便饭。但国外的源下载速度实在太慢,浪费时间。而且经常出现下载后安装出错问题。所以把PIP安装源替换成国内镜像,可以大幅提升下载速度,还可以提高安装成功率。 国内源: 新版ubuntu要求使用https源,要注意。 清华:https://pypi.tuna.tsinghua.edu.cn/simple 阿里云:http://mirrors.aliyun.com/pypi/simple/ 中国科技大学 https://pypi.mirrors.ustc.edu.cn/simple/ 华中理工大学:http://pypi.hustunique.com/ 山东理工大学:http://pypi.sdutlinux.org/ 豆瓣:http://pypi.douban.com/simple/ 临时使用: 可以在使用pip的时候加参数 -i https://pypi.tuna.tsinghua.edu.cn/simple 例如: pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pyspider ,这样就会从清华这边的镜像去安装pyspider库。 永久修改,一劳永逸: Linux下,修改 **~/.pip/pip.conf **