scrapy框架拼接url的两种方式

常见的两种拼接方式

这两种方式是基于使用scrapy框架时

第一种:发送get请求时,在url中携带的参数

from urllib.parse import urlencode
import scrapy

class TbSpider(scrapy.Spider):
    name = 'tb'
    allowed_domains = ['tieba.baidu.com']
    start_urls = "http://tieba.baidu.com/mo/q---9B24CFBB3AB18AF4DF3D1023F8FCAA4C%3AFG%3D1-sz%40320_240%2C-1-3-0--2--wapp_1534314273694_881/m?"

    def start_requests(self):
        # 从新定义一个请求
        data = {
            "pnum": 1,
            "tnum": 11922,
            "kw": "贴吧名称",
            "lp": 5009,
            "pinf": 1_2_0,
        }
        params = urlencode(data)
        url = self.start_urls + params
        yield scrapy.Request(
            url,
            callback=self.parse
        )

第二种:当url地址不完整时,可以通过python自带的urllib模块,进行拼接
例如:需要在网页中找到下一页的url,对下一页的url进行拼接

# 获取下一页的url,但是url还不完整
next_url = response.xpath("//li[@class='next']/a/@href").extract_first()
        if next_url is not None:
        # 使用urllib模块中urljoin进行拼接
            next_url = urllib.parse.urljoin(response.url,next_url)
            yield  scrapy.Request(
                next_url,
                callback=self.parse_book_list,
                meta = {"item":item}
            )

其中第二种还有更加简单的方式:在知道要请求下一页的url的前提下,通过字符串的拼接就可以获取完整的url。

next_url=response.xpath("//a[text()='下一页']/@href").extract_first()
        next_url = "http://category.dangdang.com" + next_url
        if next_url is not None:
            yield scrapy.Request(
                next_url,
                callback=self.parse_book_list
            )

你可能感兴趣的:(爬虫)