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

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

完整代码: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. hdu 1281 棋盘游戏 (二分匹配)

    //是象棋里的车 符合二分匹配 # include<stdio.h> # include<algorithm> # include<string.h> using ...

  2. 查找——图文翔解HashTree(哈希树)

    引 在各种数据结构(线性表.树等)中,记录在结构中的相对位置是随机的.因此在机构中查找记录的时须要进行一系列和keyword的比較.这一类的查找方法建立在"比較"的基础上.查找的效 ...

  3. unity之Mathf类

    说明:Mathf类主要提供数学计算的函数与常量,包含了所有数学计算时需要用到的函数.所以掌握Mathf类里面的成员变量和成员函数是必要的. 使用Mathf:通常的如果使用一个类中的成员变量或者成员函数 ...

  4. php中常用$_SERVER的用法

    #测试网址: http://localhost/blog/testurl.php?id=5 //获取域名或主机地址 echo $_SERVER['HTTP_HOST']."<br> ...

  5. mybatis传递Map和List集合示例

    1.List示例 java文件: dao: public List<ServicePort> selectByIps(List<String> ips); xml文件: < ...

  6. [Extjs] Ext4 Ext.grid.Panel 分页实现(mybatis 分页插件-PageHelper 使用)

    先看图: 页面js代码: var userStore=Ext.create('Ext.data.Store', { storeId:'userStore', fields:['uname', 'ema ...

  7. 如何根据select选择的值反查option的属性

    有时候select已经被选中了,想知道这个选中option的属性又该如何处理呢? 我这里提供一种粗暴的方式 <!DOCTYPE HTML> <html lang="en-U ...

  8. laravel 查询构建器(连贯操作)

    注:laravel 查询返回行的都是 php 的 stdClass 对象实例,不是数组!!!! 1)查询多行(get) DB::table('table_name')->get(); 带偏移和限 ...

  9. ping命令和telnet命令

    1.检查能不能连接上远程主机 ping  主机ip 2.检查远程主机端口是不是开放 telnet 198.10.10.69 1521 Trying 198.10.10.69...Connected t ...

  10. Nginx(一)-- 初体验

    1.概念 Nginx ("engine x") 是一个高性能的 HTTP 和反向代理服务器,也是一个 IMAP/POP3/SMTP 服务器. Nginx提供基本http服务,可以作 ...