开始项目 scrapy startproject ArticleSpider

在ArticleSpider下面生成 jobbole.py文件
scrapy genspider jobbole blog.jobbole.com


为了方便调试,我们写一个执行的主函数main.,py

from scrapy.cmdline import executeimport os
import syssys.path.append(os.path.dirname(os.path.abspath(__file__)))  #可以打印一下,得到路径
execute(['scrapy', 'crawl', 'jobbole']) #实际上是执行列表拼接的内容

如果在用xpath根据类名来确定节点信息,存在如下这种情况:

<span class = 'a' 'b' 'c'>some</span>

然而你只想根据一个类名a来确定节点,如果这样写的话,肯定是有问题的

response.xpath('//span[@class="a"]')   #错误做法,因为span有三个类
response.xpath('//span[contains(@class, "a")]')  #正确做法

关于正则:

x = re.match(".*(\d+).*", "12收藏")
if x:num = x.group(1)  #这里第一个元素是从1开始,而不是像数组一样从0开始,group方法得到的是()中匹配的内容# num = 12

关于css选择器:

a[href*='jobbole']  #选取所有的href属性值包含jobbole的a元素
a[href^='http']     #选取所有的href属性值以http开头的a元素
a[href$='.jpg']     #选取所有href属性值以.jpg结尾的a元素
input[type=radio]:checked   #选择选中的radio的元素
div:not(#container)  #选取所有的id非container的div属性eg1:
response.css('.entry h1').extract()[0]
# <h1>Hello</h1>
response.css('.entry h1::text').extract()[0]
# Hello
#如果要获取a标签的href属性
response.css('.entry a::attr(href)').extract()[0]

Request函数用法:

from scrapy.http import Requestdef parse(self, response):yield Request(url = posturl, meta = {'image':imageurl}, callback=self.parse_detail)#如果需要拼接域名yield Request(url = parse.urljoin(response.url, posturl), callback = self.parse_detail)if nexturl:yield Request(url = nexturl, callback = self.parse)def parse_detail(self, response):imagurl = response.meta.get('image',"")   #获取上面传入的参数

如何在pipelines.py上自动下载图片文件?


IMAGES_URLS_FIELD 对应的是items.py中保存图片的那个字段,images是保存图片的目录

接下来是将url进行MD5加密,是减少url长度的方法:

import hashlibdef get_md5(url):if isinstance(url, str):url = url.encode('utf-8')m = hashlib.md5()m.update(url)return m.hexdigest()print get_md5('http://www.baidu.com')

pipelines.py中数据库的连接可以这样写(异步容器连接池,异步插入):

from  twisted.enterprise import adbapi
class MysqlTwistedPipeline(object):def __init__(self, dbpool):self.dbpool = dbpool@classmethoddef from_settings(cls, settings):dbparams = dict(host = settings['MYSQL_HOST']user = settings['MYSQL_USER']   # MYSQL_USER在settings.py中写死了,上面那个也是password = settings['MYSQL_PASSWORD']db = settings['MYSQL_DB'],charset = 'utf8',cursorclass = MySQLdb.cursors.DictCursor,use_unicode = True,)dbpool = adbapi.ConnectionPool('MySQLdb', **dbparams)return cls(dbpool)def process_item(self, item, spider):query = self.dbpool.runInteraction(self.do_insert, item)query.addErrback(self.handle_error)def handle_error(self, failure):  #处理异常插入函数print failuredef do_insert(self, cursor, item):insert_sql = """insert into jobbole(title, url, createurl) values(%s, %s, %s)"""self.cursor.execute(insert_sql, (item['title'], item['url'], item['url']))

Scrapy复习总结相关推荐

  1. Python面试必备—分布式爬虫scrapy+redis解析

    传智播客博学谷 微信号:boxuegu- get最新最全的IT技能 免费领取各种视频资料 注意:文末送书 很多小伙伴留言,最近准备跳槽,但是面试的机会比较少,好不容易得到面试机会,由于技术点的匮乏,面 ...

  2. request设置请求头_收藏 Scrapy框架各组件详细设置

    今天说一下Scrapy框架各组件的详细设置. 关于Scrapy Scrapy是纯Python语言实现的爬虫框架,简单.易用.拓展性高是其主要特点.这里不过多介绍Scrapy的基本知识点,主要针对其高拓 ...

  3. python 获取pv_Python爬虫入门教程 40-100 博客园Python相关40W博客抓取 scrapy

    爬前叨叨 第40篇博客吹响号角,爬取博客园博客~本文最终抓取到了从2010年1月1日到2019年1月7日的37W+文章,后面可以分析好多东西了呢 经常看博客的同志知道,博客园每个栏目下面有200页,多 ...

  4. python scrapy框架爬虫当当图书网

    最近在复习scrapy框架,就随便找了个网站做了一下爬虫,当当网,说实话这种网站还是比较好做爬虫的,我没加代理,也没限速,没写多线程,就直接搞下来了,数据量还是比较可观的.接下来进入正题: 先看一下整 ...

  5. centos7 python3 爬虫登陆邮箱_Centos7搭建Scrapy爬虫环境

    写在前面 因为之前的爬虫环境一直是部署在我自己本地的电脑上的,最近,写了一个监控别人空间的爬虫,需要一直线上24小时运行,所有就打算云服务器上部署环境,也捣鼓了好一会才弄好,还是有一些坑,这里先记录一 ...

  6. 基于Python、scrapy爬取软考在线题库

    前言 前段时间,报名个软件设计师考试,自然需要复习嘛,看到软考在线这个平台有历年来的题目以及答案,想法就是做一个题库小程序咯,随时随地可以打开复习.很多人问,这不出现很多类似的小程序了?是的,但是他们 ...

  7. Scrapy翻页爬取示例——列表页、详情页

    Scrapy翻页爬取示例--列表页.详情页 引言: 本人最近在帮助同事们爬取一批英-泰双语数据,顺带复习了一下scrapy爬虫相关的知识.下面以简单的小项目为例,一起来开始吧! 示例一:爬取列表页 本 ...

  8. 章节十六:复习与反爬虫

    章节十六:复习与反爬虫 目录 章节十六:复习与反爬虫 1. 爬虫总复习 1.1 工具 1.2 解析与提取(一) 1.3 解析与提取(二) 1.4 更厉害的请求 1.5 存储 1.6 更多的爬虫 1.7 ...

  9. [python爬虫之路day19:] scrapy框架初入门day1——爬取百思不得姐段子

    好久没学习爬虫了,今天再来记录一篇我的初入门scrapy. 首先scrapy是针对大型数据的爬取,简单便捷,但是需要操作多个文件以下介绍: 写一个爬虫,需要做很多的事情.比如: 发送网络请求, 数据解 ...

最新文章

  1. 调试Tomcat源码
  2. Android--PullToRefreshListView 的简单使用
  3. delete语句与reference约束冲突怎么解决_mysql update语句和原数据一样会更新么
  4. Python 学习之元组
  5. 【架构二】后端高可用架构演进
  6. 一句话实现php日期转中文汉字
  7. ABAP Debugging Script(调试器脚本)使用的一些实际例子
  8. 页面点击提交跳转_一个入口一次提交!“六税合一”综合申报操作指南请收好~...
  9. react里面的this_React 为啥要绑定this
  10. 列标题 如何删除gridcontrol_GridControl简单属性操作
  11. 用 bmon 实时查看网络流量
  12. 详解SpringBoot整合ace-cache缓存
  13. MySQL不能使用/tmp
  14. jmeter-正则表达式提取器
  15. 直播电商源码,无加密
  16. opencv打开Lena图像,并且将Lena改成单通道的图片
  17. python grpc基于流式传输实现长连接
  18. Excel 行列转换的最简方法
  19. StringUtils中isNotEmpty和isNotBlank及isBlank()和isEmpty()区别
  20. 【亿可控】第一天系统分析与设计

热门文章

  1. SQL Server -- 如何书写优雅、漂亮的SQL脚本?
  2. sphinx (coreseek)——2、区段查询实例
  3. Discuz! Ucenter API for JAVA jar包和测试代码
  4. 社交网络营销之制订“参与社交网络的规则”
  5. 七岁OpenStack热情不减 如此执着为哪般?
  6. 拯救不靠谱:他是怎样将技术外包做到纠纷率3%?
  7. mutable和volatile关键字
  8. 学生宿舍管理系统--需求说明、概要设计、详细设计
  9. 上一季诺基亚销售下跌28%
  10. Channels In Go