Wang's blog Wang's blog
首页
  • 前端文章

    • HTML教程
    • CSS
    • JavaScript
  • 前端框架

    • Vue
    • React
    • VuePress
    • Electron
  • 后端技术

    • Npm
    • Node
    • TypeScript
  • 编程规范

    • 规范
  • 我的笔记
  • Git
  • GitHub
  • VSCode
  • Mac工具
  • 数据库
  • Google
  • 服务器
  • Python爬虫
  • 前端教程
更多
收藏
关于
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

Wang Mings

跟随大神,成为大神!
首页
  • 前端文章

    • HTML教程
    • CSS
    • JavaScript
  • 前端框架

    • Vue
    • React
    • VuePress
    • Electron
  • 后端技术

    • Npm
    • Node
    • TypeScript
  • 编程规范

    • 规范
  • 我的笔记
  • Git
  • GitHub
  • VSCode
  • Mac工具
  • 数据库
  • Google
  • 服务器
  • Python爬虫
  • 前端教程
更多
收藏
关于
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • Python爬虫

    • 爬虫的基础知识

    • 请求的发送方法

    • 数据提取方法

    • 高性能爬虫

    • selenium

    • 反爬以及解决方案

    • MONGODB数据库

    • scrapy框架

    • scrapy_redis

    • 爬虫的部署

    • 爬虫框架开发分析

    • 框架雏形实现

    • 框架功能完善

    • 框架功能升级

    • 项目实战

      • scrapy_plus实现腾讯招聘爬虫
        • 腾讯招聘爬虫案例
          • 1 腾讯招聘爬虫代码
          • 修改项目的settings.py
          • 此时运行项目的main.py程序异常
          • 2 修改scrapy_plus代码
      • scrapy_plus实现新浪滚动新闻爬虫
    • pywin32介绍

  • 前端教程

  • 教程
  • Python爬虫
  • 项目实战
wangmings
2022-07-19
目录
腾讯招聘爬虫案例
1 腾讯招聘爬虫代码
修改项目的settings.py
此时运行项目的main.py程序异常
2 修改scrapy_plus代码

scrapy_plus实现腾讯招聘爬虫

# 腾讯招聘爬虫案例

# 1 腾讯招聘爬虫代码

from scrapy_plus.core.spider import Spider
from scrapy_plus.http.request import Request

class TencentSpider(Spider):

    name = 'tencent'
    start_urls = ['https://hr.tencent.com/position.php']

    def parse(self, response): # 对start_urls进行解析
        print(response.url + '*****')
        tr_list = response.xpath('//*[@class="tablelist"]//tr')[1:-1]
        print(len(tr_list))

        for tr in tr_list:
            item = {}
            # 获取一部分数据
            item['name'] = tr.xpath('./td[1]/a/text()')[0]
            item['address'] = tr.xpath('./td[4]/text()')[0]
            item['time'] = tr.xpath('./td[5]/text()')[0]
            # 获取详情页url,并发送请求
            detail_url = 'https://hr.tencent.com/' + tr.xpath('./td[1]/a/@href')[0]
            print(detail_url)
            yield Request(
                detail_url,
                parse='parse_detail',
                meta=item # meta接收一个字典
            )
        # 翻页
        print(response.xpath('//a[text()="下一页"]/@href')[0])
        next_url = 'https://hr.tencent.com/' + response.xpath('//a[text()="下一页"]/@href')[0]
        if response.xpath('//a[text()="下一页"]/@href')[0] != 'javascript:;':
            yield Request(next_url, parse='parse')

    def parse_detail(self, response):
        # print(response.body)
        item = response.meta # 获取传入的meta
        item['job_content'] = response.xpath('//*[@class="squareli"]//text()')[0] # 加入岗位职责数据
        print(item)
        yield item 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# 修改项目的settings.py
......
# 启用的爬虫类
SPIDERS = [
    # 'spiders.baidu.BaiduSpider',
    # 'spiders.baidu2.Baidu2Spider',
    # 'spiders.douban.DoubanSpider',
    'spiders.tencent.TencentSpider',
]
...... 
1
2
3
4
5
6
7
8
9
# 此时运行项目的main.py程序异常

IndexError: list index out of range

经过debug我们发现,是因为请求头缺少了 User-Agent!

# 2 修改scrapy_plus代码

# scrapy_plus/conf/default_settings.py
......

# 默认请求头
HEADERS = {'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.139 Safari/537.36'} 
1
2
3
4
5
# scrapy_plus/core/spider.py

......
from scrapy_plus.conf.settings import HEADERS
......
    def start_requests(self):
        for url in self.start_urls:
            # 此处修改
            yield Request(url, headers=HEADERS, filter=False)

    def parse(self, response):
        yield Item(response.body) 
1
2
3
4
5
6
7
8
9
10
11
12
# scrapy_plus/http/request.py

from scrapy_plus.conf.settings import HEADERS # 此处新增


class Request():
    """这是封装的request对象"""

    def __init__(self, url, method='GET', data=None, headers=HEADERS, parse='parse', meta={}, filter=True): # 此处修改
        ...... 
1
2
3
4
5
6
7
8
9
10
编辑 (opens new window)
断点续爬设计原理及其实现
scrapy_plus实现新浪滚动新闻爬虫

← 断点续爬设计原理及其实现 scrapy_plus实现新浪滚动新闻爬虫→

最近更新
01
theme-vdoing-blog博客静态编译问题
09-16
02
搜索引擎
07-19
03
友情链接
07-19
更多文章>
Theme by Vdoing | Copyright © 2019-2025 Evan Xu | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式
  • 主题模式