豹哥用的是python3.6.4,安装scrapy 废了老大事了,pip失败然后逐个安装最好才好的,scrapy框架不会的大家针对自己的版本去查看网上的教程,特别多,而且也很简单易懂,豹哥就不逐个列举了。
在cmd中检查scrapy 安装成功后
在cmd中创建项目
命令如下:
scrapy startproject MyCraw
然后在C盘里边->user->MyCraw->spiders->创建MySpider.py
然后 一顿操作猛如虎,一看战绩0-5,哈哈哈哈。
好了不废话了。
直接代码:
import os
import urllib.request
import scrapy
class MySpider(scrapy.spiders.Spider):
name='mySpider'
allowed_domains=['www.sdiders.edu.cn']
start_urls=['http://www.sdibt.edu.cn/info/1026/11238.htm']
def parse(self,response):
self.downloadWebpage(response)
self.downloadImages(response )
hxs=scrapy.Selector(response )
sites =hxs.xpath('//ul/li')
for site in sites:
link = site.xpath('a/@href').extra()[0]
if link =='#':
continue
#把相对地址转换成绝对地址
elif link.startswith('..'):
next_url=os.path.dirname(response.url )
next_url +='/'+link
else:
next_url=link
#生成request对象,并指定回调函数
yield scrapy.Request(url=next_url,callback=self.parse_item)
#回调函数对起始页面的每个超链接起作用
def parse_item(self,response):
self.downloadWebpage(response)
self.downloadImages(response )
#下载当前页面中所有图片
def downloadImages(self,response):
hxs=scrapy.Selector(response)
images=hxs.xpath('//img@/@scr').extract()
for image_url in images:
imageFilename=image_url.split('/')[-1]
if os.path.exists(imageFilename):
continue
#把相对地址转换为绝对地址
if image_url.startswith('..'):
image_url=os.path.dirname(response.url)+'/'+image_url
#打开网页图片
fp=urllib.request.urlopen(image_url)
#创建本地图片文件
with open(imageFilename,'wb')as f:
f.write(fp.read())
fp.close()
#把网页保存为本地文件
def downloadWebpage(self,response):
filename = response.url.split('/')[-1]
with open(filename,'wb')as f:
f.write(response.body)
然后 cmd里 scrapy crawl myspider
就开启爬虫生涯了。
写爬虫不痛苦,痛苦的是出错找不出来,当初我这段代码就是按书上敲得,作者写的很“言简意赅”,然后就苦了我了,把我改的想砸键盘。不说了,都是伤心往事。
大家有什么好的爬虫代码,无论是自己写的还是转载的都可以留言讨论交流。
我依稀记得我大二用爬虫爬百度贴吧的美女图片,那是一个阳光灿烂的午后,那是一个回不去的青春。。。。
哈哈哈。