-
Linux上运行爬虫项目
2020-05-10 06:54:10在阿里云的Linux上安装了docker镜像,然后在docker镜像中运行爬虫项目 首先要有项目. 然后将项目文件放入docker镜像中 然后就运行. 问题一:docker镜像中的Python没有requests第三方库 —>我就pip install requests...在阿里云的Linux上安装了docker镜像,然后在docker镜像中运行爬虫项目
首先要有项目.
然后将项目文件放入docker镜像中
然后就运行.问题一:docker镜像中的Python没有requests第三方库
—>我就pip install requests
结果又遇到没有 pip install
—>然后就看怎么能装上pip install
在docker环境中先输入wget --no-check-certificate https://bootstrap.pypa.io/get-pip.py
下载完成之后输入python3 get-pip.py
(这一步稍微费点时间,网不好会报错)
我的docker镜像中Python的命令是Python3
这样pip install 就能用了
然后就pip install requests
问题二:怎么将项目放到docker镜像中
—>查看容器ID
docker ps -aqf "name=centos8python3"
—>将文件从宿主机复制到容器中的指定路径下docker cp /root/cloudmusic/cloudmusic.py centos8python3:/root/cloudmusic/
结果出现了这种结果:no such directory
意思就是没有这个路径
这里是我的问题,忘创建文件了.
因为第一次做的时候已经创建过了,第二次再做的时候给忘了.
—>创建cloudmusic_spider文件夹和Python.txt(保存爬虫项目运行结果)
mkdir cloudmusic_spider
touch python.txt
---->重新复制
依然报错no such directory
这里是我的命令写错了,应该是复制到cloudmusic_spider
但是我是cloudmusic
因为tab补全不是显示的docker镜像中的路径
—>复制成功启动项目
又缺少lxml第三方库
pip install lxml
—>运行项目
结果直接在我的黑窗口显示乱码结果
因为我的命令python3 cloudmusic.py
因此重新修改命令python3 cloudmusic.py > /root/cloudmusic_spider/python.txt
运行成功!
舒服了啊!后续
爬成功之后
爬了三个小时,爬完了,在Linux上
vim cloudmusic.txt
感觉不是很好…全是乱码
这样我就有两个思路- 在Linux系统下修改文件编码格式
- 先复制到Windows系统中再看情况
为了稳妥,我先拿出来
把文件复制到Windows下
先从镜像中提出来
docker cp centos8python3:/root/cloudmusic_spider/cloudmusic.txt /root/cloudmusic/
命令在宿主机窗口下输入!
然后就是下载到本地了
然后打开,一切正常.因此可以看出在Linux下仅仅是因为编码的问题.在Linux中修改文件编码
在宿主机中也显示正常
那就是在镜像中的编码有问题(系统编码的问题)
–>修改镜像中的系统编码
docker exec -it centos8python3 /bin/bash
然后试图给镜像添加utf8编码
找到了一个localedef
的命令
这个可以加载utf8的字符集,但是还没学会怎么用
这个坑日后再填.
留个连接http://blog.chinaunix.net/uid-23842323-id-2656507.html -
python爬虫怎么运行_python爬虫随笔(2)—启动爬虫与xpath
2020-11-30 11:23:24启动爬虫在上一节中,我们已经创建好了我们的scrapy项目,看着这一大堆文件,想必很多人都会一脸懵逼,我们应该怎么启动这个爬虫呢?既然我们采用cmd命令创建了scrapy爬虫,那就得有始有终有逼格,我们仍然采用...启动爬虫
在上一节中,我们已经创建好了我们的scrapy项目,看着这一大堆文件,想必很多人都会一脸懵逼,我们应该怎么启动这个爬虫呢?
既然我们采用cmd命令创建了scrapy爬虫,那就得有始有终有逼格,我们仍然采用程序员的正统方式——cmd的方式运行它
scrapy crawl jobbole
当我们在cmd中输入这条命令后,我们的爬虫也就开始运行了。但是如果每次都需要这样才能启动,不仅费时费力,也难以在IDE中调试程序。面对这种情况,我们可以采取使用python来实现自动命令行的启动。好吧,真香!
于是我们在我们的项目中创建一个main.py文件
编写以下代码
# Author :Albert Shen
# -*- coding: utf-8 -*-
from scrapy.cmdline import execute
import sys
import os
if __name__ == '__main__':
sys.path.append(os.path.dirname(os.path.abspath(__file__)))
execute(["scrapy", "crawl", "jobbole"])
运行main.py,我们就会发现,scrapy成功开始运行,并将运行结果输出到了console窗口,此时我们也就可以充分利用IDE的优势,进行便捷的调试与运行。
初尝爬虫
既然我们的爬虫已经可以运行了,那么应该如何编写逻辑才能爬取到我们想要的数据呢?
首先我们打一个断点
此时大家注意response对象的text变量,看起来是否很像网页的html代码。为了确认这个猜测是否正确,我们可以将text变量的值复制出来,拷贝到一个html文件中,打开发现确实是目标网页的html源代码。
这是因为当程序开始运行,scrapy获取网页数据后,调用了此文件中的parse函数,同时将获取到的数据传递给了resposne参数。这正是scrapy框架的强大之处,将前面一系列与目标网页相关的操作进行了封装,我们只需要关心怎么从网页源代码中获得想要的信息即可,所以我们后续的操作将主要围绕这response参数来进行。
如果大家尝试一些其他网页,可能会出现获得的网页与我们想要的网页不同的情况,这多是因为目标网页需要登录验证或采取了反爬虫策略,这一部分我们将在后续的文章中涉及。
xpath
既然我们已经获得了网页的源代码,那么我们应该怎么解析数据呢?可能细心的读者会注意到response.text的值是一个字符串,那么采用正则表达式不失为一种可靠的方式。但是作为一个成熟的爬虫框架,scrapy为我们提供了一种更加简便准确的方式——xpath。将我们的jobbole.py文件修改为这样
# -*- coding: utf-8 -*-
import scrapy
class JobboleSpider(scrapy.Spider):
name = 'jobbole'
allowed_domains = ['blog.jobbole.com']
start_urls = ['http://blog.jobbole.com/all-posts/']
def parse(self, response):
articles = response.xpath('//a[@class="archive-title"]/text()').extract()
print(articles)
pass
运行程序,打断点调试,我们发现,articles变量是一个list,包含20个字符串,正好就是目标网页的20篇文章的标题。通过一行即能实现精确的目标数据提取,正是依靠xpath。
在学习xpath之前,读者最好能对前端,尤其是HTML语言有一定了解,至少需要知道一些基本的概念。
HTML语言是一种超级文本标记语言,与后端的C,java,python等不同,HTML不是编程语言,而是标记语言,是通过一系列标签来描述网页。如果对此没有概念的读者可以简单的将其理解为HTML语言是通过一句句话告诉浏览器,首先我在这要放一段文字,然后要在这那一张图片等等,类似于画图。
HTML标记标签通常被称为HTML标签。是由尖括号<>包围的关键字,如,
等。标签之间的部分被称为元素,同时每个标签也有属性,例如其中标签表示这是一个链接,This is a link 是显示给阅读者的字符,href是它的一个属性,表示目标网址是http://www.w3school.com.cn。真实的显示效果如下图所示
点击它就能跳转到目标网页。
如果想要深入的了解HTML的知识,可以在w3school上进行学习:http://www.w3school.com.cn/
xpath正是基于此的。常用的xpath语法如下图所示(来源:w3school)
举一些例子
大家如果想要深入了解xpath,也建议到w3school进行进一步学习。如果对前端实在不熟悉的读者,也可以跟着笔者这个系列的教程,相信经过一段时间的练习,也能够熟练掌握相关知识。
有了上面的知识,我们来分析一下我们是怎么得到目标网页的所有标题的呢?
在浏览器中打开目标网页http://blog.jobbole.com/all-posts/,按f12(Chrome浏览器)打开开发者工具
1.我们可以在想要查看的元素处右击,选择“检查”
2.在开发者攻击中点击2位置的图标,然后点击我们想要查看的元素
Chrome就会自动跳转到目标元素的源代码处。
目标元素几个比较重要的信息为
2.目标元素包含多个属性,其中一个属性为class,值为archive-title,一个属性为href,值为点击这个标题将会跳转的目标网页的网址
3.包含一个属性为title,其值与标签之间的“元素”值相同。
articles = response.xpath('//a[@class="archive-title"]/text()').extract()
我们上述代码中的 //a[@class="archive-title"] 表示取整个文档中所有( // 表示整个文档中的所有节点)包含class属性(中括号[]表示对前面标签的限制,如包含什么属性),且属性值为“archive-title”的a节点(标签)。
我们可以搜索网页的所有代码,就会发现所有包含 archive-title 字符串的只有20处,正好是本页所有文章的标题 标签的class属性值,也就是说我们仅凭这一句话就精确地选到了我们想要的数据。
/text()表示我们想要获得这些标签的“元素”值(即标签之间的内容,也就是会在网页上显示出来的内容),如果想要获得标签的某个属性值,如href,则可以使用如下语句
response.xpath('//a[@class="archive-title"]/@href').extract()
因为我们取的是属性,所以一定不要忘了@来表示属性,如果没有a,则会认为是目标a标签下的href标签,显然是错误的。
extract()表示获得 提取出来的数据的data变量,即我们指定的标签中的内容。如果觉得这一句难以理解,读者也可以将程序中的.extract()删除,观察结果。
彩蛋:在开发者工具中,右击源代码,我们可以选择复制目标标签的xpath。同理,由于动态网页等原因,这种方式获得的xpath可能与scrapy获得的网页不匹配。这种方式可以帮助大家更深入的理解xpath,但在后续的编程过程中,笔者还是建议大家自己进行分析。
As Albert says: 既然写程序是为了偷懒,那写程序的时候就不要偷懒了。
结语
在这一节中,我们了解了如何快捷地启动scrapy,xpath基本语法,并尝试进行了scrapy爬虫的初次尝试。在后面的章节中,我们将会对整篇网页进行解析,并采用深度优先搜索遍历jobbole的所有文章,解析数据,下载封面图等。同时我们将使用到正则表达式以分析字符串来获得我们想要的数据,由于篇幅限制,笔者将不会对正则表达式进行详细介绍,建议大家提前了解一些正则表达式的基本知识。
-
你如何运行爬虫?
2020-12-08 22:43:20那你是怎么运行的,是一个一个爬虫调用,还是使用异步执行,同时运行多个爬虫? 如果是后者,如何解决不同页面结构不同,而pipline.py文件中管道处理?要知道每个网站的... -
定期运行爬虫的方法思考
2021-01-08 08:30:47date函数和sed函数来实现 定期运行爬虫的可能性,使得定期运行脚本爬取微博成为可能性,具体方法如下。 1 新建 “run.sh” <pre><code> #! /bin/sh #替换日期 脚本 DATE=$(date -d '7 days ago... -
scrapy项目下运行多个爬虫
2019-07-04 10:33:08一般创建了scrapy文件夹后,可能需要写多个爬虫,如果想让它们同时运行而不是顺次运行的话,得怎么做? a、在spiders目录的同级目录下创建一个commands目录,并在该目录中创建一个crawlall.py,将scrapy源代码里的...一般创建了scrapy文件夹后,可能需要写多个爬虫,如果想让它们同时运行而不是顺次运行的话,得怎么做?
a、在spiders目录的同级目录下创建一个commands目录,并在该目录中创建一个crawlall.py,将scrapy源代码里的commands文件夹里的crawl.py源码复制过来,只修改run()方法即可!
import os from scrapy.commands import ScrapyCommand from scrapy.utils.conf import arglist_to_dict from scrapy.utils.python import without_none_values from scrapy.exceptions import UsageError class Command(ScrapyCommand): requires_project = True def syntax(self): return "[options] <spider>" def short_desc(self): return "Run all spider" def add_options(self, parser): ScrapyCommand.add_options(self, parser) parser.add_option("-a", dest="spargs", action="append", default=[], metavar="NAME=VALUE", help="set spider argument (may be repeated)") parser.add_option("-o", "--output", metavar="FILE", help="dump scraped items into FILE (use - for stdout)") parser.add_option("-t", "--output-format", metavar="FORMAT", help="format to use for dumping items with -o") def process_options(self, args, opts): ScrapyCommand.process_options(self, args, opts) try: opts.spargs = arglist_to_dict(opts.spargs) except ValueError: raise UsageError("Invalid -a value, use -a NAME=VALUE", print_help=False) if opts.output: if opts.output == '-': self.settings.set('FEED_URI', 'stdout:', priority='cmdline') else: self.settings.set('FEED_URI', opts.output, priority='cmdline') feed_exporters = without_none_values( self.settings.getwithbase('FEED_EXPORTERS')) valid_output_formats = feed_exporters.keys() if not opts.output_format: opts.output_format = os.path.splitext(opts.output)[1].replace(".", "") if opts.output_format not in valid_output_formats: raise UsageError("Unrecognized output format '%s', set one" " using the '-t' switch or as a file extension" " from the supported list %s" % (opts.output_format, tuple(valid_output_formats))) self.settings.set('FEED_FORMAT', opts.output_format, priority='cmdline') def run(self, args, opts): #获取爬虫列表 spd_loader_list=self.crawler_process.spider_loader.list()#获取所有的爬虫文件。 print(spd_loader_list) #遍历各爬虫 for spname in spd_loader_list or args: self.crawler_process.crawl(spname, **opts.spargs) print ('此时启动的爬虫为:'+spname) self.crawler_process.start() --------------------- 作者:行者刘6 来源:CSDN 原文:https://blog.csdn.net/qq_38282706/article/details/80977576 版权声明:本文为博主原创文章,转载请附上博文链接!
b、还得在里面加个_init_.py文件
c、到这里还没完,settings.py配置文件还需要加一条。COMMANDS_MODULE = ‘项目名称.目录名称’
COMMANDS_MODULE = 'ds1.commands'
d、最后启动crawlall即可!
当然,安全起见,可以先在命令行中进入该项目所在目录,并输入scrapy -h,可以查看是否有命令crawlall 。如果有,那就成功了,可以启动了
我是写了个启动文件,放在第一级即可
要不直接在命令台cmd里输入 scrapy crawlall 就行了##注意的是,爬虫好像是2个同时运行,而且运行时是交叉的?
还有settings里的文件,只针对其中一个?
原文:https://blog.csdn.net/qq_38282706/article/details/80977576
-
怎么防爬虫爬取信息_Python爬虫练手小项目:爬取旅游网酒店信息
2021-01-09 10:48:08前言对于初学者而言,案例主要的是为了让大家练手,明白其中如何这样写的思路,而不是拿着代码运行就完事了。基本环境配置系统:Python3系统:Windows相关模块: bs4、 requests安装模块:pip 安装即可地址:穷游网...前言
对于初学者而言,案例主要的是为了让大家练手,明白其中如何这样写的思路,而不是拿着代码运行就完事了。
基本环境配置
系统:Python3
系统:Windows
相关模块: bs4、 requests
安装模块:pip 安装即可
地址:穷游网
实现代码
该案例你可能会遇到的一些问题:
①Strip()方法用于删除开始或结尾的字符。lstrip()|rstirp()分别从左右执行删除操作。默认情况下会删除空白或者换行符,也可以指定其他字符。
②如果想处理中间的空格,需要求助其他技术 ,比如replace(),或者正则表达式
③strip()和其他迭代结合,从文件中读取多行数据,使用生成器表达式
④更高阶的strip
可能需要使用translate()方法
小编推荐一个学python的学习qun 740,3222,34
无论你是大牛还是小白,是想转行还是想入行都可以来了解一起进步一起学习!裙内有开发工具,很多干货和技术资料分享! -
python scrapy项目下spiders内多个爬虫同时运行
2018-07-09 21:40:05一般创建了scrapy文件夹后,可能需要写多个爬虫,如果想让它们同时运行而不是顺次运行的话,得怎么做? a、在spiders目录的同级目录下创建一个commands目录,并在该目录中创建一个crawlall.py,将scrapy源代码... -
python django框架怎么爬虫步骤_如何在django中运行scrapy框架
2021-01-28 16:08:51在django项目的根目录创建scrapy项目4.cmd命令行运行:scrapyd 启动服务5.将scrapy项目部署到当前工程:scrapyd-deploy 爬虫名称 -p 项目名称6.views.py# 首页def index(request):return render(request,'index.... -
同时运行多个scrapy爬虫的几种方法(自定义scrapy项目命令)
2020-02-18 00:57:16同时运行多个scrapy爬虫的几种方法(自定义scrapy项目命令) 试想一下,前面做的实验和例子都只有一个spider。然而,现实的开发的爬虫肯定不止一个。既然这样,那么就会有如下几个问题:1、在同一个项目中... -
python写的爬虫怎么放在微信小程序的环境下运行(或者说怎么在微信小程序写爬虫)?
2017-11-27 06:28:31现在正在准备毕业设计,不想做一般的web项目(所有人都在做没有什么新意),思来想去最后决定用python写个爬虫(这个是毕设的核心功能),然后想联系当下的较流行的微信小程序,把爬虫放到微信小程序上进行运行(曾... -
python手机版怎么运行项目或脚本-把Python脚本放到手机上定时运行
2020-11-01 12:55:52毫无疑问,数据是数据分析的基础,而对于我等平民来说,获取大量数据的方式自然是通过爬虫采集,而对于笔者来说...为了爬取每天更新的数据,往往需要每天都要运行一次爬虫,特别地,是在某个点定时运行。这样的话,... -
python爬虫怎么赚钱-如何用爬虫技术赚钱?
2020-10-28 20:58:40题主啊,我不知道你爬虫技术是什么水平,但是我觉得只要你能写出正常运行的爬虫就不应该问这种问题。我做了四年多的爬虫(副业),大大小小做了近百个项目,既然你问了,我就答一波。首先,你的思路不应该在卖数据上... -
python从零基础到项目实战怎么样-Python 3.x网络爬虫从零基础到项目实战
2020-11-01 12:08:32● 案例完整 本书中的所有案例都是通过“理论讲解 + 环境搭建 + 完整代码及分析 + 运行结果”这种完善的结构进行讲解的。此外,复杂的案例配有项目结构图,有难度的案例还分析了底层源码,并且对于所有案例的讲解,... -
爬虫分页怎么失败了?
2017-01-17 14:33:05这是我第一个爬虫项目,可能还做的不是很成熟,总之先谢谢你的解答! 错误日志在这:<a href="https://i.stack.imgur.com/EEcya.png" rel="nofollow noreferrer">Error Log1</a> ... -
爬虫回响521_爬虫遇到521错误怎么办
2021-02-05 19:09:01最近,当我再次运行之前的爬虫项目的时候,What?怎么不行了??本来好好的,报了521错误。我只是一个爬虫菜鸟,还是第一次接触到这个错误。然后我就去百度了。百度一圈后,发现这是一个js设置cookie的反爬方式。... -
Scrapy爬虫(六):多个爬虫组合实例
2016-12-27 14:07:36运行爬虫 本章将实现多个爬虫共同工作的实例。 需求分析我们现在有这么个需求,既要爬取音乐详情又要爬取乐评,既要爬取电影详情又要爬取影评,这个要怎么搞,难道是每一个需求就要创建一个项目么,如果按这种方式... -
爬虫div下的中文怎么提取_在Scrapy中如何利用Xpath选择器提取目标信息(两种方式)...
2020-12-03 18:49:52没来得及上车的小伙伴可以戳这些文章:手把手教你如何新建scrapy爬虫框架的第一个项目(上)手把手教你如何新建scrapy爬虫框架的第一个项目(下)关于Scrapy爬虫项目运行和调试的小技巧(上篇)关于Scrapy爬虫项目运行和... -
在主机-调度-爬虫的日志界面显示 Processing Failed 是怎么回事啊
2021-01-05 09:54:01<div><p>爬虫是正常运行的,但是应该是scrapy输出的信息位置显示的是这样。。 \\</p>\\\\Processing Failed\\\该提问来源于开源项目:Gerapy/Gerapy</p></div>
-
基于自适应模糊滑模的PMSM无速度传感控制研究
-
C和C++课程
-
华为1+X——网络系统建设与运维(高级)
-
Swift中的@escaping是什么?
-
python_programas-源码
-
智能停车场云平台(附vue+SpringBoot前后端项目源码)
-
Maven工程的web.xml模板
-
本地存储的方式与差异.md
-
基于java的ssm框架的论坛源码
-
scala-continuations:Scala定界的continuation插件和库-源码
-
如何设计四象限电压转换电路?
-
2021年 系统分析师 系列课
-
基于FX系列PLC的计算机串口通信和编程口通信
-
朱老师鸿蒙系列课程第1期-3.鸿蒙系统Harmonyos源码配置和管理
-
Windows系统管理
-
MySQL 查询与高级查询(多表、嵌套和正则表达式)
-
个人站点:前端-源码
-
MySQL 高可用工具 DRBD 实战部署详解
-
用微服务spring cloud架构打造物联网云平台
-
项目经理成长之路