Scrapy爬取静态页面
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爬取静态页面的更多相关文章
- node js 爬虫爬取静态页面,
先打一个简单的通用框子 //根据爬取网页的协议 引入对应的协议, http||https var http = require('https'); //引入cheerio 简单点讲就是node中的jq ...
- scrapy爬取相似页面及回调爬取问题(以慕课网为例)
以爬取慕课网数据为例 慕课网的数据很简单,就是通过get方式获取的 连接地址为https://www.imooc.com/course/list?page=2 根据page参数来分页
- Scrapy 爬取动态页面
目前绝大多数的网站的页面都是冬天页面,动态页面中的部分内容是浏览器运行页面中的JavaScript 脚本动态生成的,爬取相对比较困难 先来看一个很简单的动态页面的例子,在浏览器中打开 http://q ...
- C# HtmlAgilityPack爬取静态页面
最近对爬虫很感兴趣,稍微研究了一下,利用HtmlAgilityPack制作了一个十分简单的爬虫,这个简易爬虫只能获取静态页面的Html HtmlAgilityPack简介 HtmlAgilityPac ...
- scrapy(四): 爬取二级页面的内容
scrapy爬取二级页面的内容 1.定义数据结构item.py文件 # -*- coding: utf-8 -*- ''' field: item.py ''' # Define here the m ...
- 以豌豆荚为例,用 Scrapy 爬取分类多级页面
本文转载自以下网站:以豌豆荚为例,用 Scrapy 爬取分类多级页面 https://www.makcyun.top/web_scraping_withpython17.html 需要学习的地方: 1 ...
- scrapy模拟浏览器爬取验证码页面
使用selenium模块爬取验证码页面,selenium模块需要另外安装这里不讲环境的配置,我有一篇博客有专门讲ubuntn下安装和配置模拟浏览器的开发 spider的代码 # -*- coding: ...
- Scrapy爬取自己的博客内容
python中常用的写爬虫的库有urllib2.requests,对于大多数比较简单的场景或者以学习为目的,可以用这两个库实现.这里有一篇我之前写过的用urllib2+BeautifulSoup做的一 ...
- 【转载】教你分分钟学会用python爬虫框架Scrapy爬取心目中的女神
原文:教你分分钟学会用python爬虫框架Scrapy爬取心目中的女神 本博文将带领你从入门到精通爬虫框架Scrapy,最终具备爬取任何网页的数据的能力.本文以校花网为例进行爬取,校花网:http:/ ...
随机推荐
- 利用spring实现服务启动就自动执行某些操作的2种方式
第一种方式,用bean的init-method属性 <bean class="com.emax.paycenter.log.LogBridge" init-method=&q ...
- PHP----------php-fpm进程数的一些相关配置
1.其中pm.max_children如何配置:pm.max_children 数量的多少根据机器内存确定,基本上一个进程需要30M的内存,假设起100个进程,那么就是3000M,3G内存. 2.pm ...
- https学习笔记三----OpenSSL生成root CA及签发证书
在https学习笔记二,已经弄清了数字证书的概念,组成和在https连接过程中,客户端是如何验证服务器端的证书的.这一章,主要介绍下如何使用openssl库来创建key file,以及生成root C ...
- IntelliJ Idea 使用笔记
1. IntelliJ Idea解决Could not autowire. No beans of 'xxxx' type found的错误提示. 原因可能有两个,第一个是IntellijIDEA本身 ...
- MySQL查询命令_SELECT 子查询
首先创建一个table mysql> create table Total (id int AUTO_INCREMENT PRIMARY KEY,name char(20),stu_num in ...
- Docker Compose 一键部署Nginx代理Tomcat集群
Docker Compose 一键部署Nginx代理Tomcat集群 目录结构 [root@localhost ~]# tree compose_nginx_tomcat/ compose_nginx ...
- Windows下用python来获取微信撤回消息
转自:https://blog.csdn.net/sunzhibin1/article/details/83348304 娱乐(windows系统) 安装itchat itchat是一个开源的pyth ...
- SSM-网站后台管理系统制作(4)---Ajax前后端交互
前提:Ajax本身就为前后端交互服务的,实现功能:用户输入信息,实时判断用户的情况,这也是现在登录界面普遍流行的做法.前端js通过注释识别Controller层,该层查询返回,和之前Google验证码 ...
- Series 和 Dataframe 的 rank 方法
rank 方法返回的是当前数据的排名名次,而 sort——values() 返回的是排名之后数据的结果 rank()用法 sort_values()用法
- 【NET Core】事务TransactionScope
.NET FrameWork时期: TransactionScope是FCL System.Transactions命名空间下的分布式事务组件,它默认为本地事务,当系统有需要时可以自动提升为分布式事务 ...