Scrapy项目的 allowed_domains = [“blog.jobbole.com”] 不用加 http://
scrapy.Request(url=article_url, callback=self.parse_article, meta={'front_image_url': front_image_url}
没有follow,callback是谁就交给谁解析,meta可以通过request将数据通过response传递到解析函数, 可用item[‘front_image_url’] = [response.meta.get(‘front_image_url’, ”)]获得,没有则返回空
article_div = response.xpath('//div[@id="archive"]/div[@class="post floated-thumb"]')
# 可以直接遍历
for div in article_div:
article_url = div.xpath('./div[@class="post-meta"]/p/a/@href').extract()[0]
front_image_url = div.xpath('./div[@class="post-thumb"]/a/img/@src').extract()[0]
print article_url
print front_image_url
yield scrapy.Request(url=article_url, callback=self.parse_article, meta={'front_image_url': front_image_url})
通过xpath获得的可以直接遍历.
tags_list = response.xpath("//p[@class='entry-meta-hide-on-mobile']/a/text()").extract()
tags_list = [element for element in tags_list if not element.encode('utf-8').strip().endswith('评论')]
tags = ','.join(tags_list)
tags_list是一个Unicode字符数组,通过列表生成式 可以重新生成一个list去掉原list中以’评论’为结尾的字符
通过join方法可以连接list中的字符串
item['title'] = response.xpath("//div[@class='entry-header']/h1/text()").extract_first("")
这个方法比extract[0]好,不会发生index error当len(list)为0时,返回默认值”“
comment_nums = response.xpath("//div[@class='post-adds']/a/span/text()").extract_first('')
match_re = re.match('.*?(\d+).*', comment_nums)
if match_re:
comment_nums = match_re.group(1)
else:
comment_nums = 0
利用正则取出评论数字
在项目目录下建立main文件
from scrapy.cmdline import execute
import sys
import os
sys.path.append(os.path.dirname(__file__))
execute(["scrapy", "crawl", "jobbole"])
可以用来调试scrapy