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):