1.在之前爬取的JobSpider中的Terminal终端中,直接创建新的文件

scrapy genspider zlzp baidu.com

2.开始解析数据
1) 先大致规划一下需要几个函数

2) 函数1跳转到函数2使用 yield scrapy.Request(url,callback,meta,dont_filter)

 
  1. # -*- coding: utf-8 -*-

  2. import scrapy

  3. from ..items import JobspiderItem

  4.  
  5. # 智联招聘信息获取

  6. class ZlzpSpider(scrapy.Spider):

  7. name = 'zlzp'

  8. allowed_domains = ['zhaopin.com']

  9. start_urls = [

  10. 'http://sou.zhaopin.com/jobs/searchresult.ashx?jl=%E5%8C%97%E4%BA%AC%2B%E4%B8%8A%E6%B5%B7%2B%E5%B9%BF%E5%B7%9E%2B%E6%B7%B1%E5%9C%B3%2B%E6%AD%A6%E6%B1%89&kw=python&p=1&isadv=0',

  11. 'http://sou.zhaopin.com/jobs/searchresult.ashx?jl=%E5%8C%97%E4%BA%AC%2B%E4%B8%8A%E6%B5%B7%2B%E5%B9%BF%E5%B7%9E%2B%E6%B7%B1%E5%9C%B3%2B%E6%AD%A6%E6%B1%89&kw=php&p=1&isadv=0',

  12. 'http://sou.zhaopin.com/jobs/searchresult.ashx?jl=%E5%8C%97%E4%BA%AC%2B%E4%B8%8A%E6%B5%B7%2B%E5%B9%BF%E5%B7%9E%2B%E6%B7%B1%E5%9C%B3%2B%E6%AD%A6%E6%B1%89&kw=html&p=1&isadv=0'

  13. ]

  14.  
  15. def parse(self, response):

  16. yield scrapy.Request(

  17. url=response.url,

  18. callback=self.parse_job_info,

  19. meta={},

  20. dont_filter=True,

  21. )

  22.  
  23. def parse_job_info(self, response):

  24. """

  25. 解析工作信息

  26. :param response:

  27. :return:

  28. """

  29. zl_table_list = response.xpath("//div[@id='newlist_list_content_table']/table[@class='newlist']")

  30. for zl_table in zl_table_list[1:]:

  31. # tbody 是网页自动生成的 运行起来看效果/或者右键查看源码

  32. # zl_td_list = zl_table.xpath("tr[1]/td")

  33. # 问题:td 数不是5个,会报错--索引越界

  34. # td1 = zl_table_list[0]

  35. # td2 = zl_table_list[1]

  36. # td3 = zl_table_list[2]

  37. # td4 = zl_table_list[3]

  38. # td5 = zl_table_list[4]

  39.  
  40. # 查找元素尽量用xpath定位,少用索引,因为有可能出现索引越界错误

  41. # 只有在不明确错误时使用异常捕获

  42. # //text()获取标签内所有文本

  43. # extract()把列表里的元素转换成文本,本身还是列表

  44. # extract_first('默认值')把列表里的元素转换成文本并取出第一个,如果取不到,返回默认值

  45. td1 = zl_table.xpath("tr/td[@class='zwmc']/div/a//text()").extract()

  46. # map返回的是一个列表 td1 = list(map(str.strip, td1))

  47. td1 = map(str.strip, td1)

  48. job_name = "".join(td1).replace(",", "/")

  49. # strip()只能清除两端的

  50. fan_kui_lv = zl_table.xpath("tr/td[@class='fk_lv']/span/text()").extract_first('没有反馈率').strip()

  51. job_company_name = zl_table.xpath("tr/td[@class='gsmc']/a[1]/text()").extract_first('没有公司名称').strip()

  52. job_salary = zl_table.xpath("tr/td[@class='zwyx']/text()").extract_first('面议').strip()

  53. job_place = zl_table.xpath("tr/td[@class='gzdd']/text()").extract_first('没有工作地点').strip()

  54. print(job_name, fan_kui_lv, job_company_name, job_salary, job_place)

  55. item = JobspiderItem()

  56. item['job_name'] = job_name

  57. item['job_company_name'] = job_company_name

  58. item['job_place'] = job_place

  59. item['job_salary'] = job_salary

  60. item['job_time'] = "没有时间"

  61. item['job_type'] = "智联招聘"

  62. item['fan_kui_lv'] = fan_kui_lv

  63. yield item

  64. yield scrapy.Request(

  65. url=response.url,

  66. callback=self.parse_next_page,

  67. meta={},

  68. dont_filter=True,

  69.  
  70. )

  71.  
  72. def parse_next_page(self, response):

  73. """

  74. 解析下一页

  75. :param response:

  76. :return:

  77. """

  78. # //div[@class='pagesDown']/ul/li/a[text()='下一页']/@href

  79. next_page = response.xpath(" //a[text()='下一页']/@href").extract_first('没有下一页')

  80. if next_page:

  81. yield scrapy.Request(

  82. url=next_page,

  83. callback=self.parse_job_info,

  84. meta={},

  85. dont_filter=True,

  86. )

3.其他的不用设置,直接利用JobSpider中存在的文件

4.运行结果如下:

scrapy爬取智联网

scrapy爬取智联网

相关文章:

  • 2021-11-09
  • 2021-09-19
  • 2021-04-15
  • 2021-10-11
  • 2021-06-26
  • 2022-12-23
  • 2021-08-29
  • 2022-12-23
猜你喜欢
  • 2022-12-23
  • 2021-09-26
  • 2021-06-28
  • 2021-11-07
  • 2022-12-23
  • 2021-05-05
相关资源
相似解决方案