##请求传参,深度爬取。需求:boss直聘岗位名称、岗位描述
import scrapy
#from bossPro.items import BossproItem
class BossSpider(scrapy.Spider):
name = "boss"
#allowed_domains = ["www.xxx.com"]
start_urls = ["https://www.zhipin.com/web/geek/job?query=Python&city=101010100"]
#定义解析详情页的函数
#回调函数接受item
def parse_detail(self,response):
item=response.meta["item"]#回调函数接受item
job_desc=response.xpath("//*[@id='main']/div[3]/div/div[2]/div[1]/div[2]//text()").extract()#返回的是一个包含字符串的列表
job_desc="".join(job_desc)#将列表中的字符串拼接
item["job_desc"]=job_desc
#print(job_desc)
yield item#将item提交给管道
def parse(self, response):
li_list=response.xpath("//*[@id='wrap']/div[2]/div[2]/div/div[1]/div[2]/ul/li")
for li in li_list:
job_name=li.xpath(".//div[1]/a/div[1]/span[1]/text()").extract_first()
#实例化一个item对象
item=BossproItem()
item["job_name"]=job_name
#print(job_name)
detail_url="https://www.zhipin.com"+li.xpath("./div[1]/a/@href").extract_first()
#对详情页发请求获取页面源码数据
#手动请求的发送
#请求传参:meta={},可以将meta字典传递给对应的回调函数即parse_detail
yield scrapy.Request(detail_url,callback=parse_detail,meta={"item":item})
通过cmd运行scrapy crawl boss没有出现报错,但是返回内容为空,仅仅显示项目所在的路径./bossPro/,网址代码和xpath路径没有错误,log_level=ERROR,DEBUG,INFO这三个值都试过没用,li_list=response.xpath("//*[@id='wrap']/div[2]/div[2]/div/div[1]/div[2]/ul/li")这段代码请求出来的结果也是一个空列表,希望能得到解答