常见的两种拼接方式
这两种方式是基于使用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
)