scrapy环境搭建 爬虫入门了解

我在学习爬虫,下面的内容都我经历的过程,是笔记,也是总结.希望对同新有所帮助
大体的思路就是 环境安装->运行scrapy->分析网页->模拟静态网页登录->模拟动态网页登录

环境安装

基于unbuntu,其它的没有试试. python代码对齐有点奇怪,代码可能有的无法直接复制粘贴使用,请见谅

  • 安装virtualenv

    sudo apt install virtualenv
    
    //--no-site-packages,这样,已经安装到系统Python环境中的所有第三方包都不会复制过来
    virtualenv --no-site-packages venv
  • 激活虚拟环境

     source venv/bin/activate
    
     //在环境下 任意地方执行以下命令可以退出
     deactivate
  • 虚拟环境里面安装scrapy

    //安装依赖
    sudo apt-get install python-dev python-pip libxml2-dev libxslt1-dev zlib1g-dev libffi-dev libssl-dev
    
    //python3
    sudo apt-get install python3 python3-dev
    
    //安装scrapy
    sudo apt-get install python-dev python-pip libxml2-dev libxslt1-dev zlib1g-dev libffi-dev libssl-dev

开始码代码

  • 创建scrapy 工程

    scrapy startproject tutorial   
  • 写爬虫代码

    import scrapy
    class QuotesSpider(scrapy.Spider):
        name = "quotes"
    
        def start_requests(self):
        urls = [
        'http://quotes.toscrape.com/page/1/',
        'http://quotes.toscrape.com/page/2/',
        ]
        for url in urls:
            yield scrapy.Request(url=url, callback=self.parse)
    
        def parse(self, response):
            page = response.url.split("/")[-2]
            filename = 'quotes-%s.html' % page
            with open(filename, 'wb') as f:
                f.write(response.body)
            self.log('Saved file %s' % filename)
  • 运行scrapy

    //在工程的上层目录运行命令
    scrapy crawl quotes

在pycharm中运行scrapy

如果你让我在vim 或者text 中写python代码,我的内心是拒绝的.有pycharm如此神器,我为毛不用列

  • 配置virtualenv环境
     Settings -> Project Interpreter
    设置
  • 增加一个py文件


    //创建文件 加入 一小段python代码
    from scrapy.cmdline import execute
    execute()

    加入Main.py后的项目文件目录格式如下:

  • 配置运行
    Run -> Eidt Configurations
    设置

    扫描二维码关注公众号,回复: 2881722 查看本文章

测试xpath css

  • 抓取网站

    scrapy shell  http://doc.scrapy.org/en/latest/_static/selectors-sample1.html
    

    简单的了解下xpath 可以查看下面的文档.
    了解归了解,只是代码写了才能够真正的理解.
    http://www.w3school.com.cn/xpath/index.asp

  • 开始测试

    //提取包含href 属性的节点
    >>> response.xpath('//a[@href="image5.html"]').extract()
    [u'<a href="image5.html">Name: My image 5 <br><img src="image5_thumb.jpg"></a>']
    
    //提取包含href 属性的节点的文本内容
    >>> response.xpath('//a[@href="image5.html"]/text()').extract()
    [u'Name: My image 5 ']
    
    //提取包含href 属性 以及别人的属性的节点节点的文本内容
    >>> response.xpath('//a[@href="image5.html"]    [@other=''"]/text()').extract()
    [u'']
    
    //提取包含href 属性的节点 下 img节点
    >>> response.xpath('//a[@href="image5.html"]//img').extract()
    [u'<img src="image5_thumb.jpg">']
    
    //提取包含href 属性的节点 下 img节点 的src属性
    >>> response.xpath('//a[@href="image5.html"]//img/@src').extract()
    [u'image5_thumb.jpg']
    
    调用函数提取指定的值
    >>> response.xpath('//a[contains(@href,"image")]/@href').extract()
    [u'image1.html', u'image2.html', u'image3.html', u'image4.html', u'image5.html']
    

静态网页模拟登录

该章节中假设网页是简单的 容易分析的.

  • 安装Request库

    pip install requests
  • 分析网页

    //requests.post 返回response
    //response的文本内容可以使用多种方式来进行解析
  • 配置cookie

    import requests
    
    params = {'username': 'Ryan', 'password': 'password'}
    requests.post("http://pythonscraping.com/pages/cookies/welcome.php", params)
    print("Cookie is set to:")
    print(r.cookies.get_dict())
    print("-----------")
    print("Going to profile page...")
    r = requests.get("http://pythonscraping.com/pages/cookies/profile.php",
    cookies=r.cookies)
  • 配置请求头

    session = requests.Session()
    headers = {"User-Agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5)
    AppleWebKit 537.36 (KHTML, like Gecko) Chrome",
    "Accept":"text/html,application/xhtml+xml,application/xml;
    q=0.9,image/webp,*/*;q=0.8"}
    url = "https://www.whatismybrowser.com/
    developers/what-http-headers-is-my-browser-sending"
    req = session.get(url, headers=headers)

动态网页模拟登录处理

过于复杂的页面分析起来比较困难,尤其是中间执行一些js脚本的.如果有客户端重定向的


  • 安装Selenium
    [ Selenium(http://www.seleniumhq.org/)是一个强大的网络数据采集工具,其最初是为网
    站自动化测试而开发的。近几年,它还被广泛用于获取精确的网站快照,因为它们可以直
    接运行在浏览器上。Selenium 可以让浏览器自动加载页面,获取需要的数据,甚至页面截
    屏,或者判断网站上某些动作是否发生。]

    进行安装操作,这个主要是用来执行js的脚本

    pip install selenium
  • 安装PhantomJS
    [PhantomJS 是一个“无头”(headless)浏览器。它会把网站加载到内存并执行页面上的
    JavaScript,但是它不会向用户展示网页的图形界面]

    //不要通过以下的命令来安装,这是一个坑
    sudo apt-get install phantomjs
    
    //正确的步骤
    
    //第一步如果下载不了,可以直接访问官网( http://phantomjs.org/download.html)
    wget https://bitbucket.org/ariya/phantomjs/downloads/phantomjs-2.1.1-linux-x86_64.tar.bz2
    
    tar xvjf phantomjs-2.1.1-linux-x86_64.tar.bz2
    
    cp /path/to/phantom/untar/bin/phantomjs /usr/local/bin/
  • 提交表单

    from selenium import webdriver
    
    // 构造访问
    driver = webdriver.PhantomJS()
    driver.get("https://t-pushadm.gionee.com:8443/adm/login.jsp");
    print('----------------------  1111111')
    //等待三秒
    time.sleep(1)
    
    //找到指定的元素 填充数据 
    driver.find_element_by_id('username').clear()
    driver.find_element_by_id('username').send_keys('xiaojz')
    driver.find_element_by_id('password').clear()
    driver.find_element_by_id('password').send_keys('987321')
    
    //点击登录动作
    driver.find_element_by_id('btn_login').click()
    
    //查看你结果
    print(driver.page_source)

猜你喜欢

转载自blog.csdn.net/xjz729827161/article/details/78812187