使用scrapy框架进行爬虫需要注意的

1.start_urls 内的网址要补充完整

2.在获取数据时,如果我们想要先获取先获取某一整块内容,然后再从此内容中获取单个零碎信息

比如

    def parse(self, response):
        ul_list = response.xpath('//ul[@class="post small-post"]')  #一小整块
        print(ul_list)

        for ul in ul_list:
            title = ul.xpath('.//div[@class="cover"]/@cover-text').extract()  #取出整块内的局部

那么需要注意: xpath对象获取的内容 都是一个列表, 返回的内容为 scrapy.selector
 如果类型为scrapy.selector 那么这个对象可以被继续迭代, 也可以被xpath继续寻找里面的内容

如果上面获取的ul_list 后面加上extract() 那么下面的xpath将不能用

3.

scrapy crawl meikong -o meikong.xml

meikong是美空拼音,文件名

将文件存储为指定类型 支持四种数据类型

4.

ValueError:Missing scheme in request url:h

相关URL必须是一个List,所以遇到该错误只需要将url转换成list即可

将得到的下载地址 放入到数据模型中,将数据模型传输给管道, 下载地址要包在列表当中

5.在进行多页操作的时候

将url传给scrapy.Request 得到的结果继续用self.parse进行处理
 

if len(next_url) !=0:
    #print(next_url)
    url = 'http://pic.netbian.com' + next_url[0]
    #将url传给scrapy.Request 得到的结果继续用self.parse进行处理
    yield  scrapy.Request(url=url,callback=self.parse)

callback 后面跟的是 要把信息传递给谁

很多时候在传递url时 都是需要拼接的  注意url的形式 ,如 / ,避免出现错误

6.scrapy中专门负责图片下载的管道

'scrapt.pipelines.images.ImagesPipeline':1

7.将文本转为json格式时

jsonData = json.loads(response.text)

8.如果想要下载或者保存信息到本地(img_url,name)

#需要引入items 设置字段
item = Xxxxitem()
item['img_url'] = [img_url]
item[name] = name

需要往items.py里面添加对应内容

img_url = scrapy.Field()
name = scrapy.Field()

9.获取信息时 需要去掉第一条数据时 用到  del  type_list[0]  遇到具体情况随机应变

10.关于获取全部文本的方式,详细见上次博客内容

 if len(author)  !=0:
                # 获取标签内部全部文本的几种方式
                # 1.获取最外层标签,遍历内部所有的子标签,获取标签文本
                # 2.正则去掉所有标签,re.compile.sub()
                # 3./text() 获取标签的文本  //text() 获取标签以及子标签的文本
                content_list = div.xpath('.//div[@class="d_post_content j_d_post_content "]//text()').extract()
                # 4 使用xpath('string(.)'),这种方式来获取所有文本并拼接
                content = div.xpath('.//div[@class="d_post_content j_d_post_content "]').xpath('string(.)').extract()[0]+'\n'
                self.f.write(content)
                print(content_list)
                remove = re.compile('\s')
                douhao = re.compile(',')
                content = ''
                for string in content_list:
                    string = re.sub(remove,'',string)
                    string = re.sub(douhao,'',string)
                    # print(string)
                    content +=string+','
                print(content)

11.

         yield scrapy.Request(url=url,meta={'type':catId[0]},callback=self.get_content_with_url)
    
  #把url 和 meta的值传到另个函数中 
    def get_content_with_url(self,response):

猜你喜欢

转载自blog.csdn.net/weixin_42660771/article/details/81530085