上章回顧
上一章Python實戰演練之scrapy初體驗中講到了scrapy項目的創建,爬蟲的創建,以及數據的提取。
跨頁爬取如何實現
不過這些都是建立在單頁網頁數據的爬取之中,很多時候我們需要跨很多頁去爬取數據,這個時候該怎麼實現呢?
首先分析該網頁的下一頁和本頁的區別
- https://edu.csdn.net/courses/o280/p1 (第一頁)
- https://edu.csdn.net/courses/o280/p2 (第二頁)
可以明顯判斷出p後面的是頁數,即修改該處即可獲取下一頁的數據
跨頁爬取的實現
所以,srcapy的跨頁爬取很好實現,只用在courses.py中添加幾行代碼即可。
import scrapy
from educsdn.items import CoursesItem
class CoursesSpider(scrapy.Spider):
name = 'courses'
allowed_domains = ['edu.csdn.net']
start_urls = ['https://edu.csdn.net/courses/o280/p1']
#第一頁
p = 1
def parse(self, response):
# 解析課程信息
# 獲取當前請求頁面下的所有課程信息
print(dd.xpath("./div[@class='titleInfor'/text()]").extract())
dl = response.selector.css("div.course_item")
# 遍歷課程信息並封裝到item
for dd in dl:
item = CoursesItem()
item['title'] = dd.css("span.title::text").extract_first()
item['url'] = dd.css("a::attr(href)").extract_first()
item['pic'] = dd.css("img::attr(src)").extract_first()
item['teacher'] = dd.css("span.lecname::text").extract_first()
item['time'] = dd.css("span.course_lessons::text").extract_first()
item['price'] = dd.css("p.priceinfo i::text").extract_first()
print(item)
# 跨頁提取信息
self.p += 1
if self.p < 4:
next_url = 'https://edu.csdn.net/courses/o280/p'+ str(self.p)
url = response.urljoin(next_url)
yield scrapy.Request(url=url,callback=self.parse)
self.p < 4
說明只爬取前三頁的數據,具體輸出和上一章差不多,只是多了2頁的新增數據,這裏就不列出了。