精华内容
下载资源
问答
  • Scrapy 爬虫模拟登陆的3种策略1 Scrapy 爬虫模拟登陆策略前面学习了爬虫的很多知识,都是分析 HTML、json 数据,有很多的网站为了反爬虫...1.1 策略一:直接POST请求登录前面介绍的爬虫 scrapy 的基本请求流程是 sta...

    Scrapy 爬虫模拟登陆的3种策略

    1 Scrapy 爬虫模拟登陆策略

    前面学习了爬虫的很多知识,都是分析 HTML、json 数据,有很多的网站为了反爬虫,除了需要高可用代理 IP 地址池外,还需要登录,登录的时候不仅仅需要输入账户名和密码,而且有可能验证码,下面就介绍 Scrapy 爬虫模拟登陆的几种策略。

    1.1 策略一:直接POST请求登录

    前面介绍的爬虫 scrapy 的基本请求流程是 start_request 方法遍历 start_urls 列表,然后 make_requests_from_url方法,里面执行 Request 方法,请求 start_urls 里面的地址,使用的是 GET 方法,由于直接使用用户名和密码可以登录,使用 POST 方法进行登录。

    例子:人人网登录

    登录地址:http://www.renren.com/PLogin.do

    944371ed2a8c66aaf7c19c78db5299b9.png

    案例步骤:

    第一步:创建项目。

    在 dos下切换到目录

    D:scrapy_project

    1fd731c75f61052df2182ee53822f357.png

    新建一个新的爬虫项目:scrapy startproject renren

    078254c34945647670621c174a3bec2b.png
    525084dc19c85d548c375f4862786a03.png

    第二步:创建爬虫。

    在 dos下切换到目录。

    D:scrapy_projectenrenenrenspiders

    用命令 scrapy genspider renren1 " renren.com" 创建爬虫。

    bca09ae71243ec30f974956522deebfd.png

    第三步: 通过浏览器登录人人网,使用 fiddler 抓包抓取登录 post 请求的 data。

    902f388e548ff629e41f4e8676a50c56.png

    第四步:编写爬虫文件。

    import scrapy

    # 登录只需要提供 post 数据就可以登录的,就可以用这种方法,

    # 下面示例:post 数据是账户密码

    class Renren1Spider(scrapy.Spider):

    name = "renren1"

    allowed_domains = ["renren.com"]

    def start_requests(self):

    url = 'http://www.renren.com/PLogin.do'

    # FormRequest 是 Scrapy 发送 POST 请求的方法

    yield scrapy.FormRequest(

    url = url,

    formdata = {"email" : "13554799060

    展开全文
  • 本篇文章将还是延续Scrapy爬虫入门篇,案例讲解还是用的之前编写好的测试数据代码。可以翻阅之前文章,也可以后台回复"慕课网爬虫"取测试代码。言归正传,本次讲解Scrapy两大中间件(download中间件、spider中间件)。...
    本篇文章将还是延续Scrapy爬虫入门篇,案例讲解还是用的之前编写好的测试数据代码。可以翻阅之前文章,也可以后台回复"慕课网爬虫"取测试代码

    言归正传,本次讲解Scrapy两大中间件(download中间件、spider中间件)。大致意思是对请求爬虫前后动作、得到爬虫数据前后进行特殊化处理。

    3c347c16394e99929d01065dba6e4e86.png


    1、下载器中间件(Downloader Middleware)

    下载器中间件是介于Scrapy的request/response处理的钩子框架。是用于全局修改Scrapy request和response的一个轻量、底层的系统。

    先来看看它能做什么:

    • 先来看看他们能做什么:

    • 自定义user-agent

    • 设置HTTP代理

    • 处理重定向

    • 设置cookies

    • 失败重试

    • ...

    讲案例前先讲解几个下载器的组件方法:

    process_request(request, spider)方法会在请求资源之前执行。process_response(request, response, spider)方法会在资源请求完成后执行process_exception(request, exception, spider)当下载处理器或者process_request()抛出异常会调用方法
    案例1:自定义User-Agent

    网上收集了多个不同引擎的浏览器版本号.

    db34bd61a9206335d69d2c328b0f6d99.png

    middlewares.py

    激活中间件:

    DOWNLOADER_MIDDLEWARES = {  'imooc_spider.middlewares.my_useragent': 300,}

    setting.py

    结果:

    # 爬虫类打印headersprint(response.request.headers)# 结果"{b'User-Agent': [b'Mozilla/5.0 (iPad; U; CPU OS 4_3_3 like Mac OS X; en-us) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8J2 Safari/6533.18.5'], b'Accept': [b'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8'], b'Accept-Language': [b'en'], b'Accept-Encoding': [b'gzip, deflate']}"
    案例2:设置代理

    准备一个可以测试检测访问IP的网站(https://tool.lu/ip/)

    3f531560ab22cf082e99f99a9d4230b9.png

    https://tool.lu/ip/

    编写测试代理的爬虫(spider).

    ae8a449ee52e8ac0a7088fc6de2df392.png

    test_proxy.py

    编写代理中间件代码:

    e7adaf9bce610fc0f632d1aba848f942.png

    middlewares.py

    激活中间件:

    DOWNLOADER_MIDDLEWARES = {   'imooc_spider.middlewares.makeUserAgent': 301,   'imooc_spider.middlewares.makeProxy': 300,}

    setting.py

    结果:

    aefc30155c629caaf9cdf6273a4f4c3b.png

    2、爬虫中间件(Spider Middleware)

    组件方法:

    process_spider_input(response, spider)当response通过spider中间件时,该方法被调用process_start_requests(start_requests, spider)当运行到start_requests()的时候,方法被调用process_spider_out(response, result, spider)当运行到yield scrapy.Request()或者yield item的时候,方法被调用process_spider_exception(response, exception, spider)当爬虫本身的代码出现了Exception的时候,方法被调用。

    调试:

    ed81fa63cf609864ca2d583d68389bc8.png

    middlewares.py

    SPIDER_MIDDLEWARES = {   'imooc_spider.middlewares.imoocSpiderMiddleware': 300,}

    setting.py

    结果在分析页面结构前被打印出来,这时候可以做一些异常检测、日志记录等功能。

    58b1d70a1e723a0af1e597f940a8d035.png

    结语:

    Scrapy框架入门讲解已完结。欢迎到本讲解教程上的github一起交流学习。

    源码后台回复关键字「慕课网爬虫

    展开全文
  • 初识Scrapy开发环境创建项目创建爬虫项目结构图创建Item分析HTML爬取网页开发环境运行平台:Windows 10Python版本:Python 3.6.1Scrapy版本:Scrapy 1.4.0IDE:Sublime text3浏览器:chrome下面我们进入本文的主题,...

    cd4cfaa91e1b46c3981feb6637ad4363.png

    初识Scrapy

    • 开发环境

    • 创建项目

    • 创建爬虫

    • 项目结构图

    • 创建Item

    • 分析HTML

    • 爬取网页

    开发环境

    运行平台:Windows 10 Python版本:Python 3.6.1 Scrapy版本:Scrapy 1.4.0 IDE:Sublime text3 浏览器:chrome


    下面我们进入本文的主题,爬取我们的第一个网页“去哪儿”的酒店城市列表,图中红色框框部门。 

    “去哪儿”:http://bnb.qunar.com/hotcity.jspac2ec2e963695e8f414f7607384f21a4.png

    创建项目

    scrapy startproject qunar

    e1d07d2d02390ca21f650ccecfb0c07c.png
     红框中是指出创建一个新爬虫。

    创建爬虫

    cd qunarscrapy genspider hotel bnb.qunar.com

    f91c307c97001d9dce7ab3505053afeb.png
     自此,我们的项目算是基本创建好了,其中“hotel”是指爬虫的名称,“bnb.qunar.com”爬虫的域名。不过为了方便我们项目启动,可以在项目中新建一个entrypoint.py文件,文件内容如下: 00f3e0faebeee52fa6b69b6c31226085.png

    项目结构图

    faebba9f7e240046f6b3cd4ce77a300d.png

    创建Item

    创建一个新的Item方便我们保存所爬取的数据,从爬取的页面中可以看出,我们需要两个数据就够了,一个是城市名称,另一个是城市对应的URL。 
    下面我们就来创建保存这两个数据Item: c4a89d39c4e701f22905dfdf758d99da.png 
    上面QunarItem是由scrapy自动生成出来的,我们暂时先不管它,如果你想直接用系统创建的那个Item也是可以的。我这里是自己新创建一个,看起来比较好管理。

    分析HTML

    按F12进入开发者工具,在按Ctrl + Shift + c 进入元素查找状态,找到包裹我们要爬取内容的div,如图下所示: 15ef653e3094b6b1ec28c67699698f95.png
     从图中可以看出,A~Z分别在一个div中,所以我们只要解析出一个div那其他25个div也就解析出来了。然后,我们在从右侧中一层一层点进去,找到第一个城市“阿坝”,如下图所示: 255262c0b68b59c8eeca5c62b976592b.png
     通过对图的观察,可以发现,我们首先要找到包裹所以内容class=”b_allcity”的div,在从这个div中找到所有class=”e_city_list”的div,在从中找到所有“li”标签中的“a”标签,爬取“a”标签中的文本及“href”属性。

    item我们已经创建好了,对HTML页面也进行了分析,下面就可以进入主题了“爬虫”,有点小激动。

    爬取网页

    打开spiders中的hotel.py文件。这文件是系统帮我们创建的,系统帮我们创建了一下关键代码。如图 7e045b2fbe519894f34890bbdf19ed30.png 
    下面我们只要对这么代码稍稍改动一点,并写出之前我们对HTML解析的代码就好了。如图: c31c527f70a271a9362e72cdad26e045.png
     本文中我使用的是“BeautifulSoup”来对HTML代码进行解析的,如果有没装“BeautifulSoup”的小伙伴可以在命令窗口中直接安装,安装代码:

    pip install bs4

    写到这里,代码就已经写完了,下面我们就来运行起来看看效果如何。 在命令窗口输入:

    python entrypoint.py

    64fde725459a5bd6210574d4d364ae2d.png 结果: 25e80197736cf8d61273db969f919c74.png 从图中可以看出,我们要爬取的内容已经被我们爬取出来了。是不是觉得“so easy”呀!!!

    正文结束!!!

    f7ad4c03586f54be854b51a0c3ec0bcc.png

    欢迎关注公众号:Python爬虫数据分析挖掘,方便及时阅读最新文章

    记录学习python的点点滴滴;

    回复【开源源码】免费获取更多开源项目源码;

    a6ad83ac59dc909f55b5c2a4b1d7602e.gif

    展开全文
  • 拉钩scrapy爬虫案例

    2020-03-29 00:06:38
    scrapy框架爬取拉钩职位信息,保存为csv文件,并上传到mysql数据库当中。此案例仅用于学习爬虫技术,不作商业用途。若侵权,请联系删除。
  • 首先,MySQL创建好数据库和表image然后编写各个模块item.pyimport scrapyclass JianliItem(scrapy.Item):name = scrapy.Field()url = scrapy.Field()pipeline.pyimport pymysql #导入数据库的类class JianliPipelin....

    首先,MySQL创建好数据库和表

    029ff47818eb

    image

    然后编写各个模块

    item.py

    import scrapy

    class JianliItem(scrapy.Item):

    name = scrapy.Field()

    url = scrapy.Field()

    pipeline.py

    import pymysql #导入数据库的类

    class JianliPipeline(object):

    conn = None

    cursor = None

    def open_spider(self,spider):

    print('开始爬虫')

    self.conn = pymysql.Connect(host='127.0.0.1',port=3306,user='root',password='',db='jianli') #链接数据库

    def process_item(self, item, spider): #编写向数据库中存储数据的相关代码

    self.cursor = self.conn.cursor() #1.链接数据库

    sql = 'insert into jl values("%s","%s")'%(item['name'],item['url']) #2.执行sql语句

    try: #执行事务

    self.cursor.execute(sql)

    self.conn.commit()

    except Exception as e:

    print(e)

    self.conn.rollback()

    return item

    def close_spider(self,spider):

    print('爬虫结束')

    self.cursor.close()

    self.conn.close()

    spider

    # -*- coding: utf-8 -*-

    import scrapy

    import re

    from lxml import etree

    from jianli.items import JianliItem

    class FxhSpider(scrapy.Spider):

    name = 'jl'

    # allowed_domains = ['feixiaohao.com']

    start_urls = ['http://sc.chinaz.com/jianli/free_{}.html'.format(i) for i in range(3)]

    def parse(self,response):

    tree = etree.HTML(response.text)

    a_list = tree.xpath('//div[@id="container"]/div/a')

    for a in a_list:

    item = JianliItem (

    name=a.xpath("./img/@alt")[0],

    url=a.xpath("./@href")[0]

    )

    yield item

    settings.py

    #USER_AGENT

    headers = {

    "user-agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36"

    }

    # Obey robots.txt rules

    ROBOTSTXT_OBEY = False

    # Configure item pipelines

    # See https://docs.scrapy.org/en/latest/topics/item-pipeline.html

    ITEM_PIPELINES = {

    'jianli.pipelines.JianliPipeline': 300,

    }

    查看存储情况

    029ff47818eb

    image

    展开全文
  • Scrapy爬虫案例-淘宝比价定向爬虫学习笔记 学习教程:Python网络爬虫与信息提取 授课老师:嵩天 官方网站:https://python123.io 教程链接:https://python123.io/index/courses/804 “淘宝比价定向爬虫”实例...
  • 如果只用上文的一些技能很难爬取大规模的网站,是否会有一些架构之类的东东,java都有spring,为什么爬虫就没有,别着急,爬虫也是有的,只是我们平时没有深入探索,下面我们就了解一下爬虫的常规架构——scrapy。...
  • 《Python项目案例开发从入门到实战——爬虫、游戏和机器学习》老猫荐书【第2期】 |《微信小程序开发零基础入门》老猫荐书【第3期】 |《Java EE框架整合开发入门到实战——Spring+Spring MVC+MyBatis》今天简单聊聊...
  • 本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,...前 言自从上次出了两篇爬虫的文章后,很多人私信我说爬虫技术还是比较系统的,如果只用上文的一些技能很难爬取大规模的网站...
  •  我是用的是pycharm开发,打开pycharm,然后在下面的“Terminal”中输入命令“scrapy startproject freebuf”。这句话是在你的工作空间中创建一个叫“freebuf”的scrapy工程。如下图: 上图中,因为我的工作空间...
  • 回顾一下写一个爬虫需要做的一些步骤,使用requests库发送网络请求、使用lxml等解析技术对数据进行解析、使用数据库等方法进行存储数据,另外还可以在请求网络的时候进行更换...而Scrapy 框架就是这个“巨人的肩膀”...
  • 构造爬虫及代码解读(1)settings.py(2)ganji.py(3)run.py(4)items.py(5)pipelines.py(6)前十条数据3.蜘蛛侠的小Tips(不是黑丝) 1.蜘蛛侠思路: 赶集网 爬取网站的url地址:点击超链接-----赶集网主页------- 步骤...
  • 案例有以下几个步骤 1、scrapy shell 使用 2、创建scrapy项目 3、创建数据库 4、编写爬虫 一、scrapy shell 使用 安装pycharm专业版(数据库要用到),ipython, 打开windows命令提示符,然后输入scrapy...
  • Scrapy 爬虫完整案例-进阶篇1.1 进阶篇案例案例:爬取豆瓣电影 top250( movie.douban.com/top250 )的电影数据,并保存在 MongoDB 中。案例步骤:第一步:明确爬虫需要爬取的内容。我们做爬虫的时候,需要明确需要...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 898
精华内容 359
关键字:

scrapy爬虫案例

爬虫 订阅