爬虫文件的编写
class DoubanSpiderSpider(scrapy.Spider): # 这里是爬虫名 name = 'douban_spider' # 允许的域名 allowed_domains = ['movie.douban.com'] # 入口url,扔到调度器里面 start_urls = ['https://movie.douban.com/top250']
第二次写 第一次写到一半蹦了 心态很炸 自己看懂就好了 不一定会很详细了
先把入口url更改一下
然后去新建一个main.py文件
在里面写入一下内容 这样就不用每次到终端运行了
from scrapy import cmdline cmdline.execute('scrapy crawl douban_spider'.split())
然后正常写我们的爬虫文件
先去我们的页面https://movie.douban.com/top250
我用的是google chrome浏览器 因为我们需要xpath 这个插件
自行百度下载即可 重启浏览器就可以 看到有这个X就可以了
然后我们检索我们需要的哪些信息 F12之后 右键检查我们所要信息
获得如下:
然后我们写我们需要的xpath
我们定义一个movie_list 其中我们的respons有个方法可以直接调用xpath
movie_list = response.xpath("//div[@class='article']//ol[@class='grid_view']/li")
此时我们需要把我们先前写好的douban.items中的DoubanItem()导入进来
from douban.items import DoubanItem
然后写入我们的xpath 其中 我们需要的是文本数据所以后面都是text() 我们需要第一个数据 extract_first()
def parse(self, response): # 循环电影的条目 movie_list = response.xpath("//div[@class='article']//ol[@class='grid_view']/li") for i_item in movie_list: # item文件导进来 douban_item = DoubanItem() # 写详细的xpath,进行数据的解析 douban_item['serial_number'] = i_item.xpath(".//div[@class='item']//em/text()").extract_first() douban_item['movie_name'] = i_item.xpath(".//div[@class='info']/div[@class='hd']/a/span[1]/text()").extract_first() douban_item['star'] = i_item.xpath(".//span[@class='rating_num']/text()").extract_first() douban_item['evaluate'] = i_item.xpath(".//div[@class='star']//span[4]/text()").extract_first() douban_item['describe'] = i_item.xpath(".//p[@class='quote']/span/text()").extract_first()
面对有好几行内容的信息 可以这样处理:
先把他们的xpath写出来 注意我们不需要第一个数据 所以不用first 然后再遍历每一项 最后赋给我们的douban_item
content = i_item.xpath(".//div[@class='info']//div[@class='bd']/p[1]/text()").extract() # 多行数据进行数据的处理 for i_content in content: content_s = "".join(i_content.split()) douban_item['introduce'] = content_s
然后需要把我们的数据yield到pipeline里面
# 你需要将数据yield到pipeline里面 yield douban_item
一共10页 每页25个 为了自动获得后一页的内容
我们同理解析
# 解析下一页规则,取后一页的xpath next_link = response.xpath("//span[@class='next']/link/@href").extract() if next_link: next_link = next_link[0]
到第十页就没有下一页 就不会继续了
yield scrapy.Request("https://movie.douban.com/top250"+next_link, callback=self.parse)
最后补上回调函数去运行就能得到我们想要的结果了