功能点:如何翻页爬取信息,如何发送请求,日志的简单实用

爬取网站:腾讯社会招聘网

完整代码:https://files.cnblogs.com/files/bookwed/tencent.zip

主要代码:

job.py

# -*- coding: utf-8 -*-
import scrapy
from tencent.items import TencentItem
import logging # 日志模块 logger = logging.getLogger(__name__) class JobSpider(scrapy.Spider):
"""职位爬虫"""
name = 'job'
allowed_domains = ["tencent.com"]
offset = 0
baseUrl = "https://hr.tencent.com/position.php?start={}"
start_urls = [baseUrl.format(offset)] def parse(self, response):
# //tr[@class="even" or @class="odd"]
# xpath(),返回一个含有selector对象的列表
job_list = response.xpath("//tr[@class='even'] | //tr[@class='odd']")
for job in job_list:
item = TencentItem()
# extract() 提取字符串,返回一个包含字符串数据的列表
# extract_first(),返回列表中的第一个字符串
# extract()[0] 可以替换成extract_first(),不用再进行判断是否为空了
item["name"] = job.xpath("./td[1]/a/text()").extract_first()
item["url"] = job.xpath("./td[1]/a/@href").extract()[0]
item["type"] = job.xpath("./td[2]/text()")
item["type"] = item["type"].extract()[0] if len(item["type"]) > 0 else None
item["people_number"] = job.xpath("./td[3]/text()").extract()[0]
item["place"] = job.xpath("./td[4]/text()").extract()[0]
item["publish_time"] = job.xpath("./td[5]/text()").extract()[0]
# 打印方式1
# logging.warning(item)
# 打印方式2,【推荐,可以看到是哪个文件打印的】
logger.warning(item)
# 为什么使用yield?好处?
# 让整个函数变成一个生成器。每次遍历的时候挨个读到内存中,不会导致内存的占用量瞬间变高
yield item # 第一种:拼接url
# if self.offset < 3090:
# self.offset += 10
# url = self.baseUrl.format(self.offset)
# yield scrapy.Request(url, callback=self.parse) # yield response.follow(next_page, self.parse) # 第二种:从response获取要爬取的链接,并发送请求处理,知道链接全部提取完
if len(response.xpath("//a[@class='noactive' and @id='next']")) == 0:
temp_url = response.xpath("//a[@id='next']/@href").extract()[0]
# yield response.follow("https://hr.tencent.com/"+temp_url, callback=self.parse)
yield scrapy.Request(
"https://hr.tencent.com/"+temp_url,
callback=self.parse,
# meta={"item": item} # meta实现在不同的解析函数中传递数据
# dont_filter=True # 重复请求
) # 此处的callback指返回的响应由谁进行解析,如果和第一页是相同的处理,则用parse,否则定义新方法,指定该新方法 def parse1(self, response):
item = response.meta["item"]
print(item)
print("*"*30)

pipelines.py

import json

class TencentPipeline(object):
# 可选实现,参数初始化等
def __init__(self):
self.f = open('tencent_job.json', 'w', encoding='utf-8') def process_item(self, item, spider):
# item(Item对象) - 被爬取的item
# spider(Spider对象)- 爬取item时的spider;通过spider.name可以获取爬虫名称
content = json.dumps(dict(item), ensure_ascii=False)+",\n"
self.f.write(content)
return item def open_spider(self, spider):
# 可选,spider开启时,该方法被调用
pass def close_spider(self, spider):
# 可选,spider关闭时,该方法被调用
self.f.close()

scrapy爬虫系列之二--翻页爬取及日志的基本用法的更多相关文章

  1. 爬虫简单之二---使用进程爬取起点中文网的六万多也页小说的名字,作者,等一些基本信息,并存入csv中

    爬虫简单之二---使用进程爬取起点中文网的六万多也页小说的名字,作者,等一些基本信息,并存入csv中 准备使用的环境和库Python3.6 + requests + bs4 + csv + multi ...

  2. 爬虫系列4:Requests+Xpath 爬取动态数据

    爬虫系列4:Requests+Xpath 爬取动态数据 [抓取]:参考前文 爬虫系列1:https://www.cnblogs.com/yizhiamumu/p/9451093.html [分页]:参 ...

  3. Scrapy分布式爬虫打造搜索引擎- (二)伯乐在线爬取所有文章

    二.伯乐在线爬取所有文章 1. 初始化文件目录 基础环境 python 3.6.5 JetBrains PyCharm 2018.1 mysql+navicat 为了便于日后的部署:我们开发使用了虚拟 ...

  4. 爬虫系列1:Requests+Xpath 爬取豆瓣电影TOP

    爬虫1:Requests+Xpath 爬取豆瓣电影TOP [抓取]:参考前文 爬虫系列1:https://www.cnblogs.com/yizhiamumu/p/9451093.html [分页]: ...

  5. scrapy爬虫笔记(三)------写入源文件的爬取

    开始爬取网页:(2)写入源文件的爬取 为了使代码易于修改,更清晰高效的爬取网页,我们将代码写入源文件进行爬取. 主要分为以下几个步骤: 一.使用scrapy创建爬虫框架: 二.修改并编写源代码,确定我 ...

  6. 爬虫系列3:Requests+Xpath 爬取租房网站信息并保存本地

    数据保存本地 [抓取]:参考前文 爬虫系列1:https://www.cnblogs.com/yizhiamumu/p/9451093.html [分页]:参考前文 爬虫系列2:https://www ...

  7. 爬虫系列2:Requests+Xpath 爬取租房网站信息

    Requests+Xpath 爬取租房网站信息 [抓取]:参考前文 爬虫系列1:https://www.cnblogs.com/yizhiamumu/p/9451093.html [分页]:参考前文 ...

  8. 爬虫系列(1)-----python爬取猫眼电影top100榜

    对于Python初学者来说,爬虫技能是应该是最好入门,也是最能够有让自己有成就感的,今天在整理代码时,整理了一下之前自己学习爬虫的一些代码,今天先上一个简单的例子,手把手教你入门Python爬虫,爬取 ...

  9. Scrapy实战篇(二)之爬取链家网成交房源数据(下)

    在上一小节中,我们已经提取到了房源的具体信息,这一节中,我们主要是对提取到的数据进行后续的处理,以及进行相关的设置. 数据处理 我们这里以把数据存储到mongo数据库为例.编写pipelines.py ...

随机推荐

  1. 说一下zoom:1的原理,万一被问到呢?

    某一天.前同事低着头从鹅厂面试回来.他说他被一道非经常见的问题难倒了. 对方问他知道zoom:1的作用吗? 前同事:清楚浮动啊,触发haslayout. 再问:那你知道zoom:1的工作原理和来龙去脉 ...

  2. mac下安装apc并且使用

    1.到网站下载对应PHP版本apc压缩包http://git.php.net/?p=pecl/caching/apc.git;a=commit;h=08e2ce7ab5f59aea483d877e2b ...

  3. PHP大量数据循环时内存耗尽问题的解决方案

    最近在开发一个PHP程序时遇到了下面的错误:PHP Fatal error: Allowed memory size of 268 435 456 bytes exhausted错误信息显...分析: ...

  4. Spring-Condition设置

    为了满足不同条件下生成更为合适的bean,可以使用condition配置其条件.假如有一个bean,id为magicBean,只有当其具有magic属性时才生成,方法如下: javaConfig模式: ...

  5. mybatis由浅入深day01_ 7输入映射(7.1传递pojo的包装对象_7.2#{}与${}_7.3传递简单类型_7.4传递pojo对象_7.5传递hashmap)

    7 输入映射 通过parameterType指定输入参数的类型,类型可以是简单类型.hashmap.pojo的包装类型. 7.1 传递pojo的包装对象 7.1.1 需求 完成用户信息的综合查询,需要 ...

  6. Android开发相关

    在用红米4X进行真机调试的时候,出现此问题,问题描述如下: DELETE_FAILED_INTERNAL_ERROR Error while Installing APK 一直调试不成功,百度了下,因 ...

  7. Access数据操作-02

    数据库连接 MDB文件 :Provider=Microsoft.Jet.OLEDB.4.0;Data Source=*.mdb ;Persist Security Info=False; AccDB文 ...

  8. docker学习-docker核心技术

    镜像:集装箱     ---build 仓库:超级码头  ----ship 容器:运行程序的地方    ----run docker运行一个程序的过程:去仓库把镜像拉到本地,然后用一条命令把镜像运行起 ...

  9. Nginx(二)-- 配置文件之虚拟主机配置

    1.配置文件与解释 #user nobody; worker_processes 1; # 设置工作子进程,默认是1个工作子进程,可以修改,一般设置为CPU的总核数 #error_log logs/e ...

  10. 第三篇:关于TIME_WAIT状态

    前言 为何TCP ”四次分手“ 的过程中会有一个TIME_WAIT状态?这个状态有什么意义呢?这是网络中的一个经典问题,本文将给出精简的回答. 什么是TIME_WAIT状态 这是TCP通信协议中出现的 ...