欢迎光临
我们一直在努力

python3.6+scrapy下载一个网站全部产品网页的源码

scrapy 一个很好用的python爬虫框架

开发环境:python3.6 + centos 7 

安装scrapy: pip install scrapy

爬虫网站: http://www.bsriceones.ga

首先我们创建一个工程:

scrapy startproject bsriceones

然后 我们cd bsriceones  进入这个工程,在改目录下,我们创建一个html文件夹来保存一会爬下来的网页的源码,在cd spider进入我们的爬虫文件,我们来写需要爬虫的网站的商品的源码下载。

import scrapy from scrapy.linkextractors import LinkExtractor from scrapy.spiders import CrawlSpider, Rule import re,time class BselSpider(CrawlSpider): name = 'bs' allowed_domains = ['bsriceones.ga'] start_urls = ['http://www.bsriceones.ga/'] #规则:将需要点击的网址按规则一条一条写入,以下规则写入两条,一条是标题栏以及翻页的信息,一条是商品信息,并调用回调函数parse_item,这里来简单的,进行源码保存 rules=( Rule(LinkExtractor(allow=r'http://www.bsriceones.ga/[a-zA-Z0-9-]+/[a-zA-Z0-9-]+'), callback='parse_item', follow=True), #不需要回调函数 因为规则可以做到 Rule(LinkExtractor(allow=r'http://www.bsriceones.ga/[a-zA-Z0-9-]+/'),follow=True), #Rule(LinkExtractor(allow=r'http://www.bsriceones.ga/[a-zA-Z0-9-]+/.*page=\d+'), follow=True), ) def parse_item(self, response): html_name = re.findall(r'p-\d+',response.url)[0] print("-------------------------------------") print(response.url) print(html_name) print("-------------------------------------") with open("/samba/xww/py/pytest/bsriceones/bsriceones/bsriceones/html/"+html_name+".html",'wb') as f: f.write(response.body) 

 

然后我们cd ../ 回到上级目录,打开setting文件,修改一下信息

#将这个改false ROBOTSTXT_OBEY = False #带上ua信息,可以在网页请求该网址的时候,将出现的ua信息copy下来,并带上referer参数,跟上你要爬的域名。 DEFAULT_REQUEST_HEADERS = { 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8', 'Accept-Language': 'en', 'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36', 'Referer':'http://www.bsriceones.ga', } 

 

然后scrapy crawl bs 或者 scrapy runspider bs.py 就可以运行程序啦,一会你的html文件夹里面就有商品的源码啦。

python3.6+scrapy下载一个网站全部产品网页的源码

 

上面只是一个简单程序,爬虫网页商品信息的源码。

当然你还可以对源码进行操作,将源码的你需要的字段(标题,价格,描述...)进行提取,存进mongo数据库(我比较习惯用mongo数据库,大家可以进行相应的选择)里面。

 

mongo:

稍微再提一下,如果你们想存mongo,首先安装mongo

pip install pymongo 

 

然后再将mongo模块引入,数据库地址连接,就可以进行你们的增删改查操作了,具体操作我就不说了,看mongo官网文档地址,非常详细。

from pymongo import MongoClient client = MongoClient('mongodb://数据库地址:27017/') db=client.product

 

代理:

有时候爬虫的时候,大量高并发的采集数据会碰到封ip,这时候我们就要使用代理。大家可以去买代理,我自己这边整理了一份代理ip的txt文件,直接使用就好,买的也是一样。有代理的怎么使用呢?在middlewares.py文件里面进行代理的配置。

import request,json,random,datetime class BsspiderProxyIPLoadMiddleware(object): def __init__(self): self.proxy = "" self.expire_datetime=datetime.datetime.now()-datetime.timedelta(minutes=1) #self._get_proxyip() def _get_proxyip(self): #代理形式 ip:端口号 一个一行 f=open("proxy.txt") proxys= f.read().split("\n") p = random.sample(proxys,1)[0] print("proxy:",p) self.proxy = p self.expire_datetime = datetime.datetime.now()+datetime.timedelta(minutes=1) def _check_expire(self): if datetime.datetime.now() >= self.expire_datetime: self._get_proxyip() print("切换ip") def process_request(self,spider,request): self._check_expire() request.meta['proxy']="http://"+self.proxy 

 

然后配置好下载器中间件,我们就要到setting文件注册一下

DOWNLOADER_MIDDLEWARES = { 'middlewares所在文件的位置.middlewares.某某某spiderProxyIPLoadMiddleware': 543 } 

 

其实scrapy这个框架很好用的,我们可以先看文档,边看边学边敲,碰到不理解的,我们可以继续往下看,等全看完了,我们回来再看第二遍,从头开始,发现就很简单啦!

文档地址:

             scrapy:https://docs.scrapy.org/en/latest/

             mongo:https://docs.mongodb.com/

  • 海报
海报图正在生成中...
赞(0) 打赏
声明:
1、本博客不从事任何主机及服务器租赁业务,不参与任何交易,也绝非中介。博客内容仅记录博主个人感兴趣的服务器测评结果及一些服务器相关的优惠活动,信息均摘自网络或来自服务商主动提供;所以对本博客提及的内容不作直接、间接、法定、约定的保证,博客内容也不具备任何参考价值及引导作用,访问者需自行甄别。
2、访问本博客请务必遵守有关互联网的相关法律、规定与规则;不能利用本博客所提及的内容从事任何违法、违规操作;否则造成的一切后果由访问者自行承担。
3、未成年人及不能独立承担法律责任的个人及群体请勿访问本博客。
4、一旦您访问本博客,即表示您已经知晓并接受了以上声明通告。
文章名称:《python3.6+scrapy下载一个网站全部产品网页的源码》
文章链接:https://www.456zj.com/9391.html
本站资源仅供个人学习交流,请于下载后24小时内删除,不允许用于商业用途,否则法律问题自行承担。

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址