Scrapy爬取静态页面

安装Scrapy框架:

Scrapy是python下一个非常有用的一个爬虫框架

Pycharm下:

搜索Scrapy库添加进项目即可

终端下:

#python2
sudo pip install scrapy

#python3
sudo pip3 install scrapy

#安装完成测试一下
scrapy version

爬取赶集网租房信息

们通过Chrome查看源代码可以发现所有的内容都是静态的,这种是比较容易爬取的。

Chrome下可以安装插件XPath。

终端下

scrapy shellhttp://bj.ganji.com/fang1/ 

返回200即表示获取成功

#调用默认的浏览器打开缓存的页面
view(response)

f12控制台下找到对应元素的xpath,可以在XPath插件下检查是不是对应的元素,复制这个对应的xpath

终端下

response.xpath('//*[@id="puid-2922388108"]/dl/dd[5]/div[1]/span[1]').extract()

response.xpath('//*[@id="puid-2922388108"]/dl/dd[5]/div[1]/span[1]/text()').extract()

批量价格获取,这里做一个选择,原来是用id来标记价格,而这个id是一个item唯一的,所以我们要找到所有items的共性,这里借助类选择器来实现,因为所有的item的css类都是f-list-item ershoufang-list,这样获取到的就是一个价格列表,在span里面再用类选择器区分一下价格和单位。总之就是找共性,一步一步将元素从复杂的页面中剥离出来。

response.xpath('//*[@class="f-list-item ershoufang-list"]/dl/dd[5]/div[1]/span[@class="num"]/text()').extract()

爬取知乎日报首页

值得注意的直接脚本爬取知乎日报的首页会返回500错误,需要对项目进行一些设置,让爬虫模拟浏览来访问页面

终端下新建Scrapy项目

scrapy startproject spiderZhihuDaily

修改settings.py,添加

DEFAULT_REQUEST_HEADERS = {
  'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
  'Accept-Language': 'en',
  'USER-AGENT': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36',
}

找到页面中要获取的对应元素

这里是:图片,标题,链接

f12控制台下检查元素,找到xpath,将这个Xpath复制下来,在代码中会用到

#我们获取的xpath是单个元素的,这里以title为例
/html/body/div[3]/div/div[2]/div/div[1]/div[1]/div/a/span
#如果需要批量获取元素,需要借助类选择器来辅助,这里做一个选择
#注意观察网页代码中的规律,每一个item的类选择器都是class="box"
#所以通过这个来实现批量title的获取
/html/body/div[3]/div/div[2]/div/div[1]/div[@class="box"]/div/a/span/text()

代码

import scrapy

class ZhihuDailySpider(scrapy.Spider):
    name = 'zhihuDaily'
    start_urls = ['http://daily.zhihu.com/']

    def parse(self, response):
        titles = response.xpath('/html/body/div[3]/div/div[2]/div/div[@class="col-lg-4"]/div[@class="wrap"]/div[@class="box"]/a/span/text()').extract()
        imgSrcs= response.xpath('/html/body/div[3]/div/div[2]/div/div[@class="col-lg-4"]/div[@class="wrap"]/div[@class="box"]/a/img/@src').extract()
        links = response.xpath('/html/body/div[3]/div/div[2]/div/div[@class="col-lg-4"]/div[@class="wrap"]/div[@class="box"]/a/@href').extract()
        for title,img,link in zip(titles,imgSrcs,links):
            print(title+"---"+img+"---"+link)

运行

终端下进入爬虫脚本所在文件夹

#执行爬虫命令
scrapy crawl zhihuDaily

Scrapy爬取静态页面的更多相关文章

  1. node js 爬虫爬取静态页面,

    先打一个简单的通用框子 //根据爬取网页的协议 引入对应的协议, http||https var http = require('https'); //引入cheerio 简单点讲就是node中的jq ...

  2. scrapy爬取相似页面及回调爬取问题(以慕课网为例)

    以爬取慕课网数据为例   慕课网的数据很简单,就是通过get方式获取的 连接地址为https://www.imooc.com/course/list?page=2 根据page参数来分页  

  3. Scrapy 爬取动态页面

    目前绝大多数的网站的页面都是冬天页面,动态页面中的部分内容是浏览器运行页面中的JavaScript 脚本动态生成的,爬取相对比较困难 先来看一个很简单的动态页面的例子,在浏览器中打开 http://q ...

  4. C# HtmlAgilityPack爬取静态页面

    最近对爬虫很感兴趣,稍微研究了一下,利用HtmlAgilityPack制作了一个十分简单的爬虫,这个简易爬虫只能获取静态页面的Html HtmlAgilityPack简介 HtmlAgilityPac ...

  5. scrapy(四): 爬取二级页面的内容

    scrapy爬取二级页面的内容 1.定义数据结构item.py文件 # -*- coding: utf-8 -*- ''' field: item.py ''' # Define here the m ...

  6. 以豌豆荚为例,用 Scrapy 爬取分类多级页面

    本文转载自以下网站:以豌豆荚为例,用 Scrapy 爬取分类多级页面 https://www.makcyun.top/web_scraping_withpython17.html 需要学习的地方: 1 ...

  7. scrapy模拟浏览器爬取验证码页面

    使用selenium模块爬取验证码页面,selenium模块需要另外安装这里不讲环境的配置,我有一篇博客有专门讲ubuntn下安装和配置模拟浏览器的开发 spider的代码 # -*- coding: ...

  8. Scrapy爬取自己的博客内容

    python中常用的写爬虫的库有urllib2.requests,对于大多数比较简单的场景或者以学习为目的,可以用这两个库实现.这里有一篇我之前写过的用urllib2+BeautifulSoup做的一 ...

  9. 【转载】教你分分钟学会用python爬虫框架Scrapy爬取心目中的女神

    原文:教你分分钟学会用python爬虫框架Scrapy爬取心目中的女神 本博文将带领你从入门到精通爬虫框架Scrapy,最终具备爬取任何网页的数据的能力.本文以校花网为例进行爬取,校花网:http:/ ...

随机推荐

  1. 记录下diagwait的问题

    对于Oracle集群,有关diagwait的解释可以很容易在网上搜到: 该问题只会出现在ORACLE 11.2 以前版本中,在 11G R2版本中,diagwait的值默认配置为13. 而针对11.2 ...

  2. idea快捷键使用

    idea                                 eclipse project                           workspace module     ...

  3. JAVA的值传递问题

    为什么 Java 中只有值传递? 首先回顾一下在程序设计语言中有关将参数传递给方法(或函数)的一些专业术语.按值调用(call by value)表示方法接收的是调用者提供的值,而按引用调用(call ...

  4. 将指定世界中的指定位置的Block转化为箱子

    在bukkit中,block可以操作所有的三位像素方块,如果是向对block进一步操作,我们就需要得到BlockState, BlockState表示一个方块的状态,才能够对方块进行位置等状态的操作, ...

  5. proto 2 语法

    一.proto文件 PB的定义是通过proto文件进行定义的,一个标准的类型如下: message SearchRequest { required string query = 1; optiona ...

  6. Delphi数据库技术中Disablecontrols和Enablecontrols的功能

    一般来说,用来扫描整个数据库表并修改每个记录的某一个字段的程序如下所示: with Table Do begin DisableControls;{在修改记录的过程中,使其它部件无效} First; ...

  7. 7.mongo python 库 pymongo的安装

    1.Python 中如果想要和 MongoDB 进行交互就需要借助于 PyMongo 库,在CMD中使用命令即可[注意此处是pip3,pip无法安装]: pip3 install pymongo 2. ...

  8. pypi上传命令

    windows 1.新建一个setup.py文件与你自己写的.py模块放在一个文件夹内 内容: from distutils.core import setup setup( name = " ...

  9. 记账本微信小程序开发七

    完成所有后续代码 主页代码 教程做的感觉很好,但是自己做出来感觉就low了很多,还是有很多需要改进的地方,这也是我下一步的改进点.

  10. java 全局变量 的小结

    利用关键字final声明常量,对于全局的常量(即在整个项目中都可用)通常按以下模式声明:public static final int MAX_VALUE=512 如果某常量只在本类使用,则应将其定义 ...