目录
目标
掌握Scrapy框架的搭建及使用,本文以爬取当当网魔幻小说为案例做演示。
版本
Scrapy 2.12.0
实战
搭建框架
第一步:在D:\pytharm_workspace位置创建爬虫Scrapy项目。通过cmd在该目录执行Scrapy创建项目命令。dangdang是我的项目名称。
scrapy startproject dangdang
第二步:进入项目目录,并创建爬虫类。其中magic_novels是我自定义的爬虫程序名称,permit.mee.gov.cn表示要爬取的网站域名。
第三步:注释在settings文件中掉OBOTSTXT_OBEY协议。
#ROBOTSTXT_OBEY = True
第四步:打开Pycharm控制台,进入项目目录。设置start_urls为我们要爬取的首页。parse表示项目启动后会自动请求start_urls中的URL。所以我们在parse方法中调试输出,并运行项目。
import scrapy
class MagicNovelsSpider(scrapy.Spider):
name = "magic_novels"
allowed_domains = ["category.dangdang.com"]
start_urls = ["https://category.dangdang.com/cp01.03.40.00.00.00.html"]
def parse(self, response):
print(response.url)
print(response.text)
scrapy crawl magic_novels
第五步:此时会打印很多的无用信息,我们可以在settings.py文件中设置日志级别。再次启动项目后会发现页面干净了很多。
LOG_LEVEL = "WARNING"
scrapy crawl magic_novels
注意:如果多次请求导致可能会导致缓存出现,请使用以下命令:
scrapy crawl magic_novels --set HTTPCACHE_ENABLED=False
获取图片链接、书名、价格
第一步:通过xpath爬取价格、图片、书名,我们先来打印调试。此时发现图片的链接不对,思考是否是懒加载的一个反扒策略。
def parse(self, response):
'''
图片的链接:src=//ul[@id='component_59']/li//img/@src
图片的名称:alt=//ul[@id='component_59']/li//img/@alt
图书的价格:price=//ul[@id='component_59']/li//p[@class='price']/span
考虑到所有的数据都来源于//ul[@id='component_59']/li,所以我们可以复用li对象。
'''
li_list = response.xpath("//ul[@id='component_59']/li")
for li in li_list:
print(f'图片的链接:src={li.xpath(".//img/@src").extract_first()}')
print(f'图片的名称:alt={li.xpath(".//img/@alt").extract_first()}')
print(f'图书的价格:price={li.xpath(".//p[@class=