咱们知道蜘蛛运行时会下载要爬取的页面,而后传给给start_urls,页面的返回对象response响应体就会封装到parse方法response对象里面,而后经过response对象css选择器定位元素,返回一个selector对象,经过extract()方法来提取selector对象中标签的信息。css
那如今咱们使用dribbble网站来试着解析字段信息,建立一个dribbble蜘蛛,就和以前建立csdn同样,而后将测试页面中的execute()方法中的参数改成须要测试的蜘蛛页面中的name属性值。html
import scrapy from urllib import parse from scrapy.http import Request class DribbbleSpider(scrapy.Spider): name = 'dribbble' allowed_domains = ['dribbble.com'] start_urls = ['https://dribbble.com/stories'] def parse(self, response): # 获取a标签的url值 # urls = response.css('h2 a::attr(href)').extract() a_nodes = response.css('header div.teaser a') for a_node in a_nodes: # print(a_node) a_url = a_node.css('::attr(href)').extract()[0] a_image_url = a_node.css('img::attr(src)').extract()[0] yield Request(url=parse.urljoin(response.url, a_url), callback=self.parse_analyse, meta={'a_image_url': a_image_url}) def parse_analyse(self, response): a_image_url = response.meta.get('a_image_url') title = response.css('.post header h1::text').extract()[0] date = response.css('span.date::text').extract_first() print('图片的url是:{}'.format(a_image_url)) print('标题是: {}'.format(title)) print('时间是:{}'.format(date.strip()))
scrapy.Item
,而后咱们能够根据咱们的需求在自动生成的这个modle中随意建立字段;import scrapy class XkdDribbbleSpiderItem(scrapy.Item): title = scrapy.Field() a_image_url = scrapy.Field() date = scrapy.Field()
import scrapy from urllib import parse from scrapy.http import Request from ..items import XkdDribbbleSpiderItem from datetime import datetime class DribbbleSpider(scrapy.Spider): name = 'dribbble' allowed_domains = ['dribbble.com'] start_urls = ['https://dribbble.com/stories'] def parse(self, response): # 获取a标签的url值 # urls = response.css('h2 a::attr(href)').extract() a_nodes = response.css('header div.teaser a') for a_node in a_nodes: # print(a_node) a_url = a_node.css('::attr(href)').extract()[0] a_image_url = a_node.css('img::attr(src)').extract()[0] yield Request(url=parse.urljoin(response.url, a_url), callback=self.parse_analyse, meta={'a_image_url': a_image_url}) def parse_analyse(self, response): a_image_url = response.meta.get('a_image_url') title = response.css('.post header h1::text').extract()[0] date = response.css('span.date::text').extract_first() date = date.strip() date = datetime.strptime(date, '%b %d, %Y').date() # 构建模型 dri_item = XkdDribbbleSpiderItem() dri_item['a_image_url'] = a_image_url dri_item['title'] = title dri_item['date'] = date yield dri_item
参考:https://www.9xkd.com/user/plan-view.html?id=4097329051node