Scrapy 爬取 豆瓣电影的短评

之前爬取电影信息的时候,将电影短评的url一并存起来了。
因此爬取电影短评的时候只需将数据库中存在的url 放入start_urls中就好了。

spider.py

# -*- coding: utf-8 -*-
from scrapy.selector import Selector
from scrapy.spiders import Spider
from scrapy.http import Request ,FormRequest
from comments.items import CommentsItem
import scrapy
from scrapy import log
import MySQLdb

class CommentSpider(Spider):
    name = "comments"
    #allowed_domains=["movie.douban.com"]
    db = MySQLdb.connect("localhost","root","123456","python" )
    cursor = db.cursor()
    #在爬取电影信息时已经将评论的链接也抓到数据库中(comment_url),  从数据中找到地址  作为 start_urls
    cursor.execute("select comment_url from doubanmovie")
    #data = cursor.fetchone() # 取一条
    data = cursor.fetchall() #取所有
    start_urls = data      
    def parse(self,response):
        sel = Selector(text=response.body)
        Url = response.url
        start_index = Url.find('comments')
        URL = Url[0:start_index+8]
        ID = filter(str.isdigit,URL)
        comments = sel.xpath('//*[@class="comment-info"]')
        for comment in comments:         
            item = CommentsItem() 
            item['ID'] = ID
            item['user_name'] = comment.xpath('a/text()').extract()
            item['user_score'] = comment.xpath('span[1]/@title').extract() 
            yield item
        for url in sel.xpath("//*[@class='next']/@href").extract():  
            yield Request(URL+url,callback=self.parse)   

运行的时候出错,
显示TypeError(‘Request url must be str or unicode, got %s:’ % type(url).name).
后来发现 是因为 从数据库中取数据,data是 tuple 格式。
直接 start_urls = data; 不合适。因为 在scrapy中 start_urls是List,而且 start_urls中的元素应该是string;
于是添加了一些代码:

    temp = list(data)
    start_urls = []
    
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
好的,以下是使用Scrapy爬取豆瓣电影的步骤: 1.创建Scrapy项目 在命令行中输入以下命令,在指定位置创建一个名为douban_movie的Scrapy项目。 ``` scrapy startproject douban_movie ``` 2.编写Spider 在项目的spiders目录下,创建一个名为douban_spider.py的Python文件。并在其中编写Spider代码。 ``` import scrapy class DoubanSpider(scrapy.Spider): name = "douban" allowed_domains = ["movie.douban.com"] start_urls = [ "https://movie.douban.com/top250" ] def parse(self, response): for movie in response.css('div.item'): yield { 'title': movie.css('span.title::text').get(), 'rating': movie.css('span.rating_num::text').get(), 'link': movie.css('div.hd a::attr(href)').get() } next_page = response.css('span.next a::attr(href)').get() if next_page is not None: yield response.follow(next_page, self.parse) ``` 在这个Spider中,我们首先定义了Spider的名称和允许爬取的域名。然后,我们指定了起始URL,并定义了parse方法来解析网页内容。 在parse方法中,我们使用CSS选择器选取出了每部电影的标题、评分和详情链接,并将它们封装成字典形式返回。同时,我们也使用了response.follow方法来跟随下一页链接继续爬取。 3.设置项目配置 打开项目的settings.py文件,将ROBOTSTXT_OBEY设置为False,这样我们就可以爬取豆瓣电影网站了。 ``` ROBOTSTXT_OBEY = False ``` 4.运行Spider 在项目的根目录下,执行以下命令来运行Spider。 ``` scrapy crawl douban -o movies.csv ``` 这个命令会执行我们编写的Spider,并将结果保存到一个名为movies.csv的CSV文件中。 恭喜你,现在你已经成功使用Scrapy爬取豆瓣电影网站的电影信息!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值