黑科技Python轻松爬取网站信息,看完我是佩服得五体投地!

news/2024/5/9 6:17:45/文章来源:https://blog.csdn.net/weixin_45287871/article/details/100128045

1. 引言

本文主要介绍如何使用Scrapy结合PhantomJS采集天猫商品内容,文中自定义了一个DOWNLOADER_MIDDLEWARES,用来采集需要加载js的动态网页内容。看了很多介绍DOWNLOADER_MIDDLEWARES资料,总结来说就是使用简单,但会阻塞框架,所以性能方面不佳。一些资料中提到了自定义DOWNLDOWNLDODOWNLOADER_HANDLER或使用scrapyjs可以解决阻塞框架的问题,有兴趣的小伙伴可以去研究一下,这里就不多说了。

2. 具体实现

2.1. 环境需求

需要执行以下步骤,准备Python开发和运行环境:

Python--官网下载安装并部署好环境变量 (本文使用Python版本为3.5.1)

lxml-- 官网库下载对应版本的.whl文件,然后命令行界面执行 "pip install .whl文件路径"

Scrapy--命令行界面执行 "pip install Scrapy",详细请参考《Scrapy的第一次运行测试》

selenium--命令行界面执行 "pip install selenium"

PhantomJS -- 官网下载

上述步骤展示了两种安装:1,安装下载到本地的wheel包;2,用Python安装管理器执行远程下载和安装。注:包的版本需要和python版本配套

2.2. 开发和测试过程

首先找到需要采集的网页,这里简单找了一个天猫商品,网址world.tmall.com/item/52,页面如下:

然后开始编写代码,以下代码默认都是在命令行界面执行

1),创建scrapy爬虫项目tmSpider

E:\python-3.5.1>scrapystartprojecttmSpider

2),修改settings.py配置

更改ROBOTSTXT_OBEY的值为False;

关闭scrapy默认的下载器中间件;

加入自定义DOWNLOADER_MIDDLEWARES。

配置如下:

DOWNLOADER_MIDDLEWARES = {'tmSpider.middlewares.middleware.CustomMiddlewares':543,'scrapy.contrib.downloadermiddleware.useragent.UserAgentMiddleware':None}

3),在项目目录下创建middlewares文件夹,然后在文件夹下创建middleware.py文件,代码如下:

# -*- coding: utf-8 -*-​fromscrapy.exceptionsimportIgnoreRequestfromscrapy.httpimportHtmlResponse, Response​importtmSpider.middlewares.downloaderasdownloader​classCustomMiddlewares(object):defprocess_request(self, request, spider):        url = str(request.url)        dl = downloader.CustomDownloader()        content = dl.VisitPersonPage(url)returnHtmlResponse(url, status =200, body = content)    defprocess_response(self, request, response, spider):iflen(response.body) ==100:returnIgnoreRequest("body length == 100")else:returnresponse

4),使用selenium和PhantomJS写一个网页内容下载器,同样在上一步创建好的middlewares文件夹中创建downloader.py文件,代码如下:

# -*- coding: utf-8 -*-importtimefromscrapy.exceptionsimportIgnoreRequestfromscrapy.httpimportHtmlResponse, Responsefromseleniumimportwebdriverimportselenium.webdriver.support.uiasui​classCustomDownloader(object):def__init__(self):# use any browser you wish        cap = webdriver.DesiredCapabilities.PHANTOMJScap["phantomjs.page.settings.resourceTimeout"] =1000cap["phantomjs.page.settings.loadImages"] =Truecap["phantomjs.page.settings.disk-cache"] =Truecap["phantomjs.page.customHeaders.Cookie"] ='SINAGLOBAL=3955422793326.2764.1451802953297; 'self.driver = webdriver.PhantomJS(executable_path='F:/phantomjs/bin/phantomjs.exe', desired_capabilities=cap)wait = ui.WebDriverWait(self.driver,10)    defVisitPersonPage(self, url):print('正在加载网站.....')        self.driver.get(url)time.sleep(1)# 翻到底,详情加载js="var q=document.documentElement.scrollTop=10000"        self.driver.execute_script(js)time.sleep(5)content = self.driver.page_source.encode('gbk','ignore')print('网页加载完毕.....')returncontent​def__del__(self):        self.driver.quit()

5) 创建爬虫模块

在项目目录E:\python-3.5.1\tmSpider,执行如下代码:

E:\python-3.5.1\tmSpider>scrapy genspider tmall'tmall.com'

执行后,项目目录E:\python-3.5.1\tmSpider\tmSpider\spiders下会自动生成tmall.py程序文件。该程序中parse函数处理scrapy下载器返回的网页内容,采集网页信息的方法可以是:

使用xpath或正则方式从response.body中采集所需字段,

通过gooseeker api获取的内容提取器实现一站转换所有字段,而且不用手工编写转换用的xpath,代码如下:

# -*- coding: utf-8 -*-importtimeimportscrapy​importtmSpider.gooseeker.gsextractorasgsextractor​classTmallSpider(scrapy.Spider):name ="tmall"allowed_domains = ["tmall.com"]    start_urls = ('https://world.tmall.com/item/526449276263.htm',    )    # 获得当前时间戳defgetTime(self):        current_time = str(time.time())m = current_time.find('.')current_time = current_time[0:m]returncurrent_time​defparse(self, response):        html = response.bodyprint("----------------------------------------------------------------------------")        extra=gsextractor.GsExtractor()extra.setXsltFromAPI("31d24931e043e2d5364d03b8ff9cc77e","淘宝天猫_商品详情30474","tmall","list")​        result = extra.extract(html)print(str(result).encode('gbk','ignore').decode('gbk'))#file_name = 'F:/temp/淘宝天猫_商品详情30474_' + self.getTime() + '.xml'#open(file_name,"wb").write(result)

6),启动爬虫

在E:\python-3.5.1\tmSpider项目目录下执行命令

E:\python-3.5.1\simpleSpider>scrapycrawltmall

输出结果:

提一下,上述命令只能一次启动一个爬虫,如果想同时启动多个呢?那就需要自定义一个爬虫启动模块了,在spiders下创建模块文件runcrawl.py,代码如下:

# -*- coding: utf-8 -*-​importscrapyfromtwisted.internetimportreactorfromscrapy.crawlerimportCrawlerRunner​fromtmallimportTmallSpider...spider = TmallSpider(domain='tmall.com')runner = CrawlerRunner()runner.crawl(spider)...d = runner.join()d.addBoth(lambda_: reactor.stop())reactor.run()

执行runcrawl.py文件,输出结果:

以自定义DOWNLOADER_MIDDLEWARES调用PhantomJs的方式实现爬虫后,在阻塞框架的问题上纠结了很长的时间,一直在想解决的方式。后续会研究一下scrapyjs,splash等其他调用浏览器的方式看是否能有效的解决这个问题。

声明:本文于网络整理,著作权归原作者所有,如有侵权,请联系小编删除。

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

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

相关文章

牛掰!10年python爬虫经验开发的案例让你搞定全球80%以上的网站

项目要求: 用户入口 1、商品信息存在文件里 2、已购商品,余额记录。 商家入口 可以添加商品,修改商品价格 商家入口: # Author:P J Jimport osps 1 >>>>>> 修改商品 2 >>>>>> 添加商…

快就完事了!10分钟用python爬取网站视频和图片

话不多说,直接开讲!教你如何用Python爬虫爬取各大网站视频和图片。 网站分析: 我们点视频按钮 可以看到url是: http://www.budejie.com/video/ 接着我们点开网页源码,看下面之处 接着我们把那个下面画红线的链接点开…

Python监控术,看看你的男女朋友究竟在逛些什么网站!

需求: (1) 获取你对象chrome前一天的浏览记录中的所有网址(url)和访问时间,并存在一个txt文件中 (2)将这个txt文件发送给指定的邮箱地址(你的邮箱) (3)建立例行任务,每天定时自动完成这些操作,你就可以通过邮件查看你对象每天看…

转帖一下《深入理解Nginx》在线支持网站的勘误,访问太慢了

2019独角兽企业重金招聘Python工程师标准>>> 《深入理解Nginx》在线支持网站 勘误公布 示例源码 答疑解惑 作者博客 微博互动 在线支持网站更改为:http://nginx.taohui.org.cn请大家访问新的站点,谢谢。 勘误公布 由于编写匆忙&#x…

一般网站有哪些常见漏洞?

Web应用是指采用B/S架构、通过HTTP/HTTPS协议提供服务的统称。随着互联网的广泛使用,Web应用已经融入到日常生活中的各个方面:网上购物、网络银行应用、证券股票交易、政府行政审批等等。在这些Web访问中,大多数应用不是静态的网页浏览&#…

每次Nginx 配置都浪费在了查资料上!来看看这个(在线配置网站)

Nginx 是一个高性能的 HTTP 和反向代理 web 服务器,同时也提供了 IMAP/POP3/SMTP 服务,其因丰富的功能集、稳定性、示例配置文件和低系统资源的消耗受到了开发者的欢迎。本文,我们总结了一些常用的 Nginx 配置代码,希望对大家有所…

tableau指标预警_如何使用Tableau分析敏捷,开发和网站指标

tableau指标预警开发人员在设计,开发,测试,部署和管理应用程序时使用了许多生产力,编码,测试和云管理工具。 尽管大多数工具都提供报告和分析功能,但技术团队可能有充分的理由开发自己的报告功能&#xff0…

有什么网站下载 消防编程软件_8个无套路下载软件的网站推荐给你

我曾经在一个朋友的电脑上看到过市面上的所有浏览器,我问他是做网页开发吗?他说他也不知道自己电脑怎么就莫名其妙安装了这么多浏览器。 效率君想了想,应该是这个原因。 先讲个我自己的经历吧。 前两天效率君想把Ps升级到2020,在百…

网站上线之前,基于SEO,该做哪些测试?

对于任何一个网站而言,在新站上线之初,每个SEO人员,都需要进行缜密的测试,用于辅助网站正式上线后,可以在搜索引擎中,有一个不错的排名。那么,新网站测试,都需要注意什么&#xff1f…

网站爬取工具

有时候需要将网站资源爬取到本地,文件少的情况下可以使用Chrome一个个保存。如果文件太多,则需要使用下面的辅助工具。 1.Teleport Ultra(不是Teleport Pro) 优点:爬取文件以及结构比较完整; 缺点:会修改原文件。会在j…

达内网站的标签翻页功能,模仿代码

参考网址&#xff1a;http://xm.tedu.cn/baidu/dnpp/?xmjavaqzs20170524fzct023&utm_term达内培训&ca_kid65421413813&ca_cv17282834319 【代码】 HTML&#xff1a; <div class"banner-wrap"><div class"container"><div clas…

几个不错的解密(MD5,SHA256等)网站

cmd5这个解密网站我相信大多数人都知道吧&#xff0c;数据库还是非常庞大的&#xff0c;一般的解密需求足够了&#xff0c;如果比较复杂就要付费了。网址&#xff1a;http://www.cmd5.com/PMD5解密&#xff0c;效果也不错&#xff0c;不收费&#xff0c;所以解密能力也有限。网…

谷歌新上线了一个安卓游戏开发者网站

开发四年只会写业务代码&#xff0c;分布式高并发都不会还做程序员&#xff1f; 谷歌为 Android 游戏开发者上线了一个网站。新网站自称 Android 游戏开发“中心”&#xff0c;目的在于帮助开发者为 Android 系统开发更有趣的手游。该网站可以帮助开发者寻找资源和工具&#…

组织官方网站建设记录贴-程序选型

服务器环境&#xff1a;IIS7.5 php mysql需求&#xff1a;开发一个组织的官方网站&#xff0c;包含组织基本信息介绍、新闻、单位会员、个人会员基本信息展示、留言板、背景音乐等基础功能。根据需求&#xff0c;使用思维导图软件画出网站大概结构。根据网站大概结构对互联网…

babylon.js 2d_Babylon.js:超越2D网站

babylon.js 2d自从我们开始向Flash告别以来&#xff0c;网络已经取得了长足的发展。 现在&#xff0c;由于HTML 5及其JavaScript图形API名册&#xff0c;我们在动画插件中可以做的大部分工作都是浏览器固有的。 最重要的之一是WebGL&#xff0c;它使浏览器可以访问GPU并提供交互…

ASP.NET Core 网站在Docker中运行

Docker作为新一代的虚拟化方式&#xff0c;未来肯定会得到广泛的应用&#xff0c;传统虚拟机的部署方式要保证开发环境、测试环境、UAT环境、生产环境的依赖一致性&#xff0c;需要大量的运维人力&#xff0c;使用Docker我们可以实现一次部署&#xff0c;到处运行。本文介绍如何…

分享一个使用 vue.js 开发的网站

为什么80%的码农都做不了架构师&#xff1f;>>> 这个网站叫 「惠淘党」&#xff0c;照着文档和google&#xff0c;前后开发用了一个多星期。由于之前使用过 angular.js&#xff0c;所以上手还是挺快的&#xff0c;主要看了一下 vue.js 的组件和路由&#xff0c;因为…

curl网站开发指南

curl网站开发指南 作者&#xff1a; 阮一峰 日期&#xff1a; 2011年9月 4日 我一向以为&#xff0c;curl只是一个编程用的函数库。 最近才发现&#xff0c;这个命令本身&#xff0c;就是一个无比有用的网站开发工具&#xff0c;请看我整理的它的用法。 curl网站开发指南 阮一…

黑客技术偷电商网站僵尸账户,先消费后还款下单诈骗

欧某先通过不同的手机&#xff0c;利用网上商城客户注册后极少使用或者不使用的“僵尸账户”&#xff0c;利用此类账户已经开通的先消费、后还款的功能&#xff0c;进行下单购物&#xff08;主要以高档手机、金饰为主&#xff0c;方便销赃&#xff09;&#xff0c;然后由其本人…

婚介交友网站出卖隐私没商量,你害怕吗?

【黑客联盟2016年12月02日讯】在如今互联网密码泄露都是上亿用户递增&#xff0c;专家开始对密码安全的方方面面进行大讨论。 2016年最大宗的数据泄露案件使得超过4亿用户账户遭到泄露&#xff0c;引起了行业专家们围绕密码安全最佳实践的大讨论。 Friend Finder Network由一系…