Python 爬虫,scrapy,提取url地址,并发送下一个url请求,scrapy.Request对象

 

项目名/spiders/爬虫名.py(爬虫,xpath等提取数据和url,发送下一个url请求):

# -*- coding: utf-8 -*-
import scrapy
from tencent.items import TencentItem

class HrSpider(scrapy.Spider):
    name = 'hr'  # 爬虫名
    allowed_domains = ['tencent.com']
    start_urls = ['http://hr.tencent.com/position.php']

    def parse(self, response):
        tr_list = response.xpath("//table[@class='tablelist']/tr")[1:-1]
        for tr in tr_list:
            item = TencentItem()
            item["title"] = tr.xpath("./td[1]/a/text()").extract_first()
            item["position"] = tr.xpath("./td[2]/text()").extract_first()
            item["publish_date"] = tr.xpath("./td[5]/text()").extract_first()
            yield item  # 将爬取的数据交给pipelines

        # 提取下一页的url地址
        next_url = response.xpath("//a[@id='next']/@href").extract_first()
        if next_url != "javascript:;":
            next_url = "http://hr.tencent.com/" +next_url
            # 发送下一个url地址请求,并指定处理响应的回调函数。
            yield scrapy.Request(
                                    next_url,
                                    callback=self.parse,  # 处理响应的回调函数。
                                    # method="GET",  # 默认GET
                                    # headers={},  # 这里的headers不能存放cookie信息。 默认None
                                    # cookies={},  # 默认None
                                    # meta = {"mydata":item},  # 可以在不同的回调函数中传递数据
                                    # dont_filter=False    # 默认False。 (scrapy默认过滤重复的url)
                                )


    # def parse1(self,response):
    #     response.meta["mydata"]  # 可以通过meta接收上一个请求处理函数传递的数据。


 

 

你可能感兴趣的:(Python+)