任务 :1爬取分类下的url 地址:https://matplotlib.org/examples/index.html
2爬取url下下载代码的url 涉及模块:import scrapy from scrapy.linkextractors import LinkExtractor
3下载所有代码ur 涉及知识:response下xpath、css的爬取
分类下的url:url1 = LinkExtractor(restrict_css='a.reference.internal::attr(href)')
url下的代码url:url2 = response.css('a.reference.external::attr(href)').extract_first()
由于爬取到的是片段,还需要合成网址,所以第一个用links = le.extract_links(response)来合成,第二个用urljoin来合成
直接以两个函数来分开操作,def parse(self, response): 和 def parse_example(self,response): 分别对应url1和url2
def parse(self, response):
url1 = LinkExtractor(restrict_css='a.reference.internal')
links = le.extract_links(response)
yield scrapy.Request(link.url,callback=self.parse_example)
四句代码,就可以把分类中所有的链接弄到手
def parse_example(self,response):
url2 =response.css('a.reference.external::attr(href)').extract_first()
links = response.urljoin(url2)
这样子就可以把代码下载链接拿到手了
接下来就是要下载代码链接中的东西了,首先要启用这里面的代码
然后在后面添加一句这样的代码,指定文件下载的目录
FILES_STORE = 'jike_src
最好别填错这里,不然就要像我一样检查半天才发现问题在于我没改后面那个,它的默认值是300,如果不改成1的话就没办法执行了
之后定义在items定义一个字典,以便查看进度。
class JikeItem(scrapy.Item):
file_urls = scrapy.Field()
files = scrapy.Field()
回到yuanma.py中导入from ..items import JikeItem
最后只需要在
def parse_example(self,response):
url2 =response.css('a.reference.external::attr(href)').extract_first()
links = response.urljoin(url2)
基础上加入
yuanma = JikeItem()
yuanma['file_urls'] = [url2]
return yuanma
就完成了。但是我不知道文件夹放在哪里。。。。。。。。。。。。