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

news/2024/5/10 0:45:37/文章来源:https://blog.csdn.net/weixin_34146986/article/details/94750413

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文件夹里面就有商品的源码啦。

 

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

当然你还可以对源码进行操作,将源码的你需要的字段(标题,价格,描述...)进行提取,存进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 = pself.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/

转载于:https://www.cnblogs.com/zhe-hello/p/10137639.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_728611.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python 网站 使用表单和模板

如果像前面那么做网站,也太丑陋了。并且功能也不多。 在实际做网站中,现在都要使用一个模板,并且在用户直接看到的页面,用html语言来写页面。 在做网站的行业里面,常常将HTMLCSSJS组成的网页,称作“前端”。…

TP5实现支付宝电脑网站支付学习笔记

这两天在公司做一个小型WEB项目,需要有支付功能。第一次做支付宝的支付,踩了点小坑,还算顺利。激动的我赶紧记下实现的流程。第一步当然是在支付宝开放平台申请公钥私钥APPID等,支付宝关官方文档都有详细介绍,这里就省略。申请完了…

Jenkins与网站代码上线解决方案

1.1 前言 Jenkins是一个用Java编写的开源的持续集成工具。在与Oracle发生争执后,项目从Hudson项目独立。 Jenkins提供了软件开发的持续集成服务。它运行在Servlet容器中(例如Apache Tomcat)。它支持软件配置管理(SCM)…

大型网站技术架构(五)网站高可用架构

2019独角兽企业重金招聘Python工程师标准>>> 网站的可用性(Avaliability)描述网站可有效访问的特性。 1、网站可用性的度量与考核 网站不可用时间(故障时间)故障修复时间点-故障发现(报告)时间点…

19款资源整合类网站推荐:每一个网站都堪称以一敌百

强烈推荐这19个资源聚合网站,每一个网站都足以堪称“以一敌百”!因为每一个网站都聚合了相当多不同类型、不同领域的网站资源,并且做了分类导航方便大家查找使用~所以,与其收藏那么多零碎的网址,不如收藏下面这些网站资…

百度竞价逐渐淘汰行业网站

最近松松编辑杰哥从百度站长论坛一位圈内站长爆料发帖了解到,百度竞价落地页正在逐渐剔除企业网站,主推自家积木鱼平台和阿里店铺作为竞价推广落地页,逐渐淘汰企业官网! 根据杰哥从站长发帖内容得知,该站长表示,不知道…

曾经的四大门户网站之一,新浪,这些年错过了三个重要的成长机会

曾经的互联网四大门户网站,新浪、网易、搜狐、腾讯,在最初新浪应该是占据首要位置的,因为新浪曾经在中国互联网发展历史上创造过多个第一。 例如,1997年10月,新浪网的前身四通利方获得了一笔数百万美元的风险投资&…

突发丨网站欠费、Netlify故障,BSC上多个项目官网访问异常

从昨天下午开始,BSC上多个项目官网访问异常。先是24号上线的Curve仿盘椭圆金融(ellipsis.finance)在昨天中午无法打开,这个项目在不到一天的时间里就吸引9亿美元资金入场。昨晚10点多,pancakeswap也无法打开。pancakes…

页面放在哪_企业全网营销型网站建设的重点有哪一些?

企业全网营销型网站建设的重点有哪一些?营销型网站建设,要注重实效,注重客户的需求点,企业做出来营销型网站,不是给自己看的,是给客户看的,这个所有企业都要弄明白,一个网站&#xf…

对csdn网站本身的一些建议

首先,表明自己的立场:我从5月份开始在csdn写博客,前段时间写的不多,但是最近越来越迷上了这个地方,是csdn的忠实用户。其次,我以下提的建议,都是善意的建议,目的是让csdn越来越好&am…

2006年主流建站系统及其典型网站演示(CMS篇)

CMS系统已经成为个人站长建站过程中必不可少的工具,现在已经基本看不到多少站长还在靠手工写HTML页面,究其原因无非是因为CMS具有使用简单,维护方便等众多优点。CMS的发展也带来了个人网站的长足发展!各色各样的网站使网络世界更加…

如何将JSP的网页部署到网上变成网站

我们都知道我们做的JSP项目,JSP网页只能在本地(自己电脑)或者局域网(内网)访问,如何让所有人都能访问呢? 一. 常见有几大建站语言,有php,ASP,ASP.NET&#…

如何将JSP的网页部署到网上变成网站

我们都知道我们做的JSP项目,JSP网页只能在本地(自己电脑)或者局域网(内网)访问,如何让所有人都能访问呢? 一. 常见有几大建站语言,有php,ASP,ASP.NET&#xf…

JavaWeb学习笔记(三)--Web应用组织结构和搭建网站

一、Web应用的组成结构 开发web应用时,不同类型的文件有严格的存放规则,否则不仅可能会使web应用无法访问,还会导致web服务器启动报错。 web.xml文件是整个web应用中最重要的配置文件,必须放置在WEB-INF目录中。在开发web应用时&a…

大型网站技术架构(五)网站高可用架构

2019独角兽企业重金招聘Python工程师标准>>> 网站的可用性(Avaliability)描述网站可有效访问的特性。 1、网站可用性的度量与考核 网站不可用时间(故障时间)故障修复时间点-故障发现(报告)时间点…

WEB网站性能优化之redis缓存技术Centos7

请查看官网: 如果浏览不顺畅请到原文章出处:https://www.sky8g.com/technology/363/ 请注意可能会提示风险,这是CSDN网站设置的问题,如果文章内的链接不是他们的网址,都会对用户提示有风险,请点击继续访问,本网站全部文章为免费技…

php免费学习网站

共同学习,共同进步网站,一个神奇的网站:www.sky8g.com 如果浏览不顺畅请到原文章出处:https://www.sky8g.com/category/news/ 请注意可能会提示风险,这是csdn官网如果不是他们的网址,其他的网址都会提示有风险,这是C…

mysqldump备份数据时网站访问过慢[甚至无法访问]解决办法

现在大多数网站使用都是数据库mysql或者mariadb数据库,因为最直接的原因就是他是开源的的,不需要支付二外的费用,并且性能也很不错,这也是mysql和mariadb如此受人们喜欢的原因。那么我们在进行的数据库的备份的时候,如…

Docker使用docker compose搭建Jellyfin私人媒体服务器 个人电影网站

->Docker及docker compose的安装点这里 创建 docker-compose.yml 文件 version: "3" services:jellyfin:image: jellyfin/jellyfincontainer_name: jellyfinstdin_open: truetty: truerestart: alwaysports:- 9004:8096volumes:- ./config:/config- /nas:/naspr…

获取cdn配置风暴英雄_GitHub Actions+腾讯云COS+SCF云函数刷新CDN自动化部署静态网站...

。作者介绍Stille:互联网重度爱好者,喜欢追求一切基于互联网的前沿科技、技术、产品,目前从事互联网软硬件相关工作。作为强迫症患者,一直对自动化部署非常痴迷,个人认为全自动部署最重要的就是稳定可靠,经…