设为首页收藏本站

Crossin的编程教室

 找回密码
 立即加入
查看: 5993|回复: 7
打印 上一主题 下一主题

刚看完入门,想问问crossin为什么没教scrapy,谢谢!

[复制链接]

2

主题

0

好友

84

积分

注册会员

Rank: 2

跳转到指定楼层
楼主
发表于 2017-10-25 09:25:33 |只看该作者 |倒序浏览
其实我也还没搞清scrapy,哈哈
回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

沙发
发表于 2017-10-25 23:24:56 |只看该作者
其实我推荐你先用 requests 来做爬虫
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

2

主题

0

好友

84

积分

注册会员

Rank: 2

板凳
发表于 2017-10-26 08:44:05 来自手机 |只看该作者
明白了,多谢
回复

使用道具 举报

2

主题

0

好友

84

积分

注册会员

Rank: 2

地板
发表于 2017-10-26 14:32:02 |只看该作者
网上看到人家的代码:# -*- coding:utf-8 -*-
import urllib2
import re
import sys

class MovieTop250:
    def _init_(self):
        reload(sys)
        sys.setdefaultencoding('utf-8')
        self.start=0
        self.param = '&filter=&type='
        self.headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64)'}
        self.movieList = []
        self.filePath = 'E:/Python27/File/DoubanTop250.txt'
    def getPage(self):
        try:
            URL = 'http://movie.douban.com/top250?start=' + str(self.start)
            request=urllib2.Request(url=URL,headers=self.headers)
            response = urllib2.urlopen(request)
            page = response.read().decode('utf-8')
            pageNum = (self.start+25)/25
            print '正在抓取第' + str(pageNum) + '页数据...'
            self.start += 25
            return page
        except urllib2.URLError,e:
            if hasattr(e,'reason'):
                print'抓取失败,具体原因:',e.reason
    def getMovie(self):
        pattern = re.compile(u'<div.*?class="item">.*?<div.*?class="pic">.*?'
                             + u'<em.*?class="">(.*?)</em>.*?'
                             + u'<div.*?class="info">.*?<span.*?class="title">(.*?)'
                             + u'</span>.*?<span.*?class="title">(.*?)</span>.*?'
                             + u'<span.*?class="other">(.*?)</span>.*?</a>.*?'
                             + u'<div.*?class="bd">.*?<p.*?class="">.*?'
                             + u'导演: (.*?)&nbsp;&nbsp;&nbsp;'
                             + u'主演: (.*?)<br>'
                             + u'(.*?)&nbsp;/&nbsp;(.*?)&nbsp;/&nbsp;'
                             + u'(.*?)</p>'
                             + u'.*?<div.*?class="star">.*?<em>(.*?)</em>'
                             + u'.*?<span>(.*?)人评价</span>.*?<p.*?class="quote">.*?'
                             + u'<span.*?class="inq">(.*?)</span>.*?</p>', re.S)
        while self.start<=225:
            page = self.getPage()
            movies = re.findall(pattern, page)
            for movie in movies:
                self.movieList.append([movie[0], movie[1], movie[2].lstrip('&nbsp;/&nbsp;'), movie[3].lstrip('&nbsp;/&nbsp;'), movie[4],movie[5], movie[6].lstrip(), movie[7], movie[8].rstrip(),movie[9], movie[10], movie[11]])
    def writeTxt(self):
        fileTop250 = open(self.filePath, 'w')
        try:
            for movie in self.movieList:
                fileTop250.write('电影排名:' + movie[0] + '\r\n')
                fileTop250.write('电影名称:' + movie[1] + '\r\n')
                fileTop250.write('外文名称:' + movie[2] + '\r\n')
                fileTop250.write('电影别名:' + movie[3] + '\r\n')
                fileTop250.write('导演姓名:' + movie[4] + '\r\n')
                fileTop250.write('参与主演:' + movie[5] + '\r\n')
                fileTop250.write('上映年份:' + movie[6] + '\r\n')
                fileTop250.write('制作国家/地区:' + movie[7] + '\r\n')
                fileTop250.write('电影类别:' + movie[8] + '\r\n')
                fileTop250.write('电影评分:' + movie[9] + '\r\n')
                fileTop250.write('参评人数:' + movie[10] + '\r\n')
                fileTop250.write('简短影评:' + movie[11] + '\r\n\r\n')
            print'文件写入成功。。。'
        finally:
            fileTop250.close()
    def main(self):
        print '正在从豆瓣电影Top250抓取数据...'
        self.getMovie()
        self.writeTxt()
        print '抓取完毕...'

DouBanSpider = MovieTop250()
DouBanSpider.main()
回复

使用道具 举报

2

主题

0

好友

84

积分

注册会员

Rank: 2

5#
发表于 2017-10-26 14:32:30 |只看该作者
结果提示:Traceback (most recent call last):
  File "E:\Python27\douban.py", line 74, in <module>
    DouBanSpider.main()
  File "E:\Python27\douban.py", line 69, in main
    self.getMovie()
  File "E:\Python27\douban.py", line 43, in getMovie
    while self.start<=225:
AttributeError: MovieTop250 instance has no attribute 'start'
回复

使用道具 举报

2

主题

0

好友

84

积分

注册会员

Rank: 2

6#
发表于 2017-10-26 14:32:55 |只看该作者
该怎么改啊?
回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

7#
发表于 2017-10-26 15:47:30 |只看该作者
__init__
两个下划线。回头再去看下面向对象
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

2

主题

0

好友

84

积分

注册会员

Rank: 2

8#
发表于 2017-10-31 11:35:53 |只看该作者
多谢!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即加入

QQ|手机版|Archiver|Crossin的编程教室 ( 苏ICP备15063769号  

GMT+8, 2024-11-23 09:42 , Processed in 0.014667 second(s), 20 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部