对于网页的采集有这样几种:
1.静态网页
2.动态网页(需进行js,ajax动态加载数据的网页)
3.需进行模拟登录后才能采集的网页
4.加密的网页
3,4的解决方案和思路会在后续blog中陈述
现在只针对1,2的解决方案与思路:
一.静态网页
对于静态网页的采集解析方法很多很多!java,python都提供了很多的工具包或框架,例如java的httpclient,Htmlunit,Jsoup,HtmlParser等,Python的urllib,urllib2,BeautifulSoup,Scrapy等,不详述,网上资料很多的。
二.动态网页
对于采集来说的动态网页是那些需要经过js,ajax动态加载来获取数据的网页,采集数据的方案分为两种:
1.通过抓包工具分析js,ajax的请求,模拟该请求获取js加载后的数据。
2.调用浏览器的内核,获取加载后的网页源码,然后对源码经行解析
一个研究爬虫的人js是必须要会得东西,网上学习资料很多,不陈述,写该条只为文章的完整性
调用浏览器内核的工具包Java也有几个,但是不是今天所讲的重点,今天的重点是文章的标题Scrapy框架结合Spynner采集需进行js,ajax动态加载的网页并提取网页信息(以采集微信公众号文章列表为例)
Start......
1.创建个微信公众号文章列表采集项目(以下简称微采集)
scrapy startproject weixin
2.在spider目录下创建一个采集spider文件
vim weixinlist.py
写入如下代码
from weixin.items import WeixinItem import sys sys.path.insert(0,'..') import scrapy import time from scrapy import Spider class MySpider(Spider): name = 'weixinlist' allowed_domains = [] start_urls = [ 'http://weixin.sogou.com/gzh?openid=oIWsFt5QBSP8mn4Jx2WSGw_rCNzQ', ] download_delay = 1 print('start init....') def parse(self, response): sel=scrapy.Selector(response) print('hello,world!') print(response) print(sel) list=sel.xpath('//div[@class="txt-box"]/h4') items=[] for single in list: data=WeixinItem() title=single.xpath('a/text()').extract() link=single.xpath('a/@href').extract() data['title']=title data['link']=link if len(title)>0: print(title[0].encode('utf-8')) print(link)
3.在items.py中加入WeixinItem类
import scrapy class WeixinItem(scrapy.Item): # define the fields for your item here like: # name = scrapy.Field() title=scrapy.Field() link=scrapy.Field()
4.在items.py的同级目录下创建一个下载中间件downloadwebkit.py,并向其中写入如下代码:
import spynner import pyquery import time import BeautifulSoup import sys from scrapy.http import HtmlResponse class WebkitDownloaderTest( object ): def process_request( self, request, spider ): # if spider.name in settings.WEBKIT_DOWNLOADER: # if( type(request) is not FormRequest ): browser = spynner.Browser() browser.create_webview() browser.set_html_parser(pyquery.PyQuery) browser.load(request.url, 20) try: browser.wait_load(10) except: pass string = browser.html string=string.encode('utf-8') renderedBody = str(string) return HtmlResponse( request.url, body=renderedBody )
这段代码就是调用浏览器内核,获取网页加载后的源码
5.在setting.py文件中进行配置,声明下载使用下载中间件
在底部加上如下代码:
#which spider should use WEBKIT WEBKIT_DOWNLOADER=['weixinlist'] DOWNLOADER_MIDDLEWARES = { 'weixin.downloadwebkit.WebkitDownloaderTest': 543, } import os os.environ["DISPLAY"] = ":0"
6.运行程序:
运行命令:
scrapy crawl weixinlist
运行结果:
kevinflynndeMacBook-Pro:spiders kevinflynn$ scrapy crawl weixinlist start init.... 2015-07-28 21:13:55 [scrapy] INFO: Scrapy 1.0.1 started (bot: weixin) 2015-07-28 21:13:55 [scrapy] INFO: Optional features available: ssl, http11 2015-07-28 21:13:55 [scrapy] INFO: Overridden settings: {'NEWSPIDER_MODULE': 'weixin.spiders', 'SPIDER_MODULES': ['weixin.spiders'], 'BOT_NAME': 'weixin'} 2015-07-28 21:13:55 [py.warnings] WARNING: :0: UserWarning: You do not have a working installation of the service_identity module: 'No module named service_identity'. Please install it from <https://pypi.python.org/pypi/service_identity> and make sure all of its dependencies are satisfied. Without the service_identity module and a recent enough pyOpenSSL to support it, Twisted can perform only rudimentary TLS client hostname verification. Many valid certificate/hostname mappings may be rejected. 2015-07-28 21:13:55 [scrapy] INFO: Enabled extensions: CloseSpider, TelnetConsole, LogStats, CoreStats, SpiderState 2015-07-28 21:13:55 [scrapy] INFO: Enabled downloader middlewares: HttpAuthMiddleware, DownloadTimeoutMiddleware, UserAgentMiddleware, RetryMiddleware, WebkitDownloaderTest, DefaultHeadersMiddleware, MetaRefreshMiddleware, HttpCompressionMiddleware, RedirectMiddleware, CookiesMiddleware, ChunkedTransferMiddleware, DownloaderStats 2015-07-28 21:13:55 [scrapy] INFO: Enabled spider middlewares: HttpErrorMiddleware, OffsiteMiddleware, RefererMiddleware, UrlLengthMiddleware, DepthMiddleware 2015-07-28 21:13:55 [scrapy] INFO: Enabled item pipelines: 2015-07-28 21:13:55 [scrapy] INFO: Spider opened 2015-07-28 21:13:55 [scrapy] INFO: Crawled 0 pages (at 0 pages/min), scraped 0 items (at 0 items/min) 2015-07-28 21:13:55 [scrapy] DEBUG: Telnet console listening on 127.0.0.1:6023 QFont::setPixelSize: Pixel size <= 0 (0) 2015-07-28 21:14:08 [scrapy] DEBUG: Crawled (200) <GET http://weixin.sogou.com/gzh?openid=oIWsFt5QBSP8mn4Jx2WSGw_rCNzQ> (referer: None) hello,world! <200 http://weixin.sogou.com/gzh?openid=oIWsFt5QBSP8mn4Jx2WSGw_rCNzQ> <Selector xpath=None data=u'<html><head><meta http-equiv="X-UA-Compa'> 互联网协议入门 [u'http://mp.weixin.qq.com/s?__biz=MzA4MjEyNTA5Mw==&mid=210032701&idx=1&sn=6b1fc2bc5d4eb0f87513751e4ccf610c&3rd=MzA3MDU4NTYzMw==&scene=6#rd'] 自己动手写贝叶斯分类器给图书分类 [u'http://mp.weixin.qq.com/s?__biz=MzA4MjEyNTA5Mw==&mid=210013947&idx=1&sn=1f36ba5794e22d0fb94a9900230e74ca&3rd=MzA3MDU4NTYzMw==&scene=6#rd'] 不当免费技术支持的10种方法 [u'http://mp.weixin.qq.com/s?__biz=MzA4MjEyNTA5Mw==&mid=209998175&idx=1&sn=216106034a3b4afea6e67f813ce1971f&3rd=MzA3MDU4NTYzMw==&scene=6#rd'] 以 Python 为实例,介绍贝叶斯理论 [u'http://mp.weixin.qq.com/s?__biz=MzA4MjEyNTA5Mw==&mid=209998175&idx=2&sn=2f3dee873d7350dfe9546ab4a9323c05&3rd=MzA3MDU4NTYzMw==&scene=6#rd'] 我从腾讯那“偷了”3000万QQ用户数据,出了份很有趣的... [u'http://mp.weixin.qq.com/s?__biz=MzA4MjEyNTA5Mw==&mid=209980651&idx=1&sn=11fd40a2dee5132b0de8d4c79a97dac2&3rd=MzA3MDU4NTYzMw==&scene=6#rd'] 如何用 Spark 快速开发应用? [u'http://mp.weixin.qq.com/s?__biz=MzA4MjEyNTA5Mw==&mid=209820653&idx=2&sn=23712b78d82fb412e960c6aa1e361dd3&3rd=MzA3MDU4NTYzMw==&scene=6#rd'] 一起来写个简单的解释器(1) [u'http://mp.weixin.qq.com/s?__biz=MzA4MjEyNTA5Mw==&mid=209797651&idx=1&sn=15073e27080e6b637c8d24b6bb815417&3rd=MzA3MDU4NTYzMw==&scene=6#rd'] 那个直接在机器码中改 Bug 的家伙 [u'http://mp.weixin.qq.com/s?__biz=MzA4MjEyNTA5Mw==&mid=209762756&idx=1&sn=04ae1bc3a366d358f474ac3e9a85fb60&3rd=MzA3MDU4NTYzMw==&scene=6#rd'] 把一个库开源,你该做些什么 [u'http://mp.weixin.qq.com/s?__biz=MzA4MjEyNTA5Mw==&mid=209762756&idx=2&sn=0ac961ffd82ead6078a60f25fed3c2c4&3rd=MzA3MDU4NTYzMw==&scene=6#rd'] 程序员的困境 [u'http://mp.weixin.qq.com/s?__biz=MzA4MjEyNTA5Mw==&mid=209696436&idx=1&sn=8cb55b03c8b95586ba4498c64fa54513&3rd=MzA3MDU4NTYzMw==&scene=6#rd'] 2015-07-28 21:14:08 [scrapy] INFO: Closing spider (finished) 2015-07-28 21:14:08 [scrapy] INFO: Dumping Scrapy stats: {'downloader/response_bytes': 131181, 'downloader/response_count': 1, 'downloader/response_status_count/200': 1, 'finish_reason': 'finished', 'finish_time': datetime.datetime(2015, 7, 28, 13, 14, 8, 958071), 'log_count/DEBUG': 2, 'log_count/INFO': 7, 'log_count/WARNING': 1, 'response_received_count': 1, 'scheduler/dequeued': 1, 'scheduler/dequeued/memory': 1, 'scheduler/enqueued': 1, 'scheduler/enqueued/memory': 1, 'start_time': datetime.datetime(2015, 7, 28, 13, 13, 55, 688111)} 2015-07-28 21:14:08 [scrapy] INFO: Spider closed (finished) QThread: Destroyed while thread is still running kevinflynndeMacBook-Pro:spiders kevinflynn$
相关推荐
其主要功能是访问网页、提取数据并存储,以便后续分析或展示。爬虫通常由搜索引擎、数据挖掘工具、监测系统等应用于网络数据抓取的场景。 爬虫的工作流程包括以下几个关键步骤: URL收集: 爬虫从一个或多个初始...
高效微信公众号历史文章和阅读数据爬虫powered_by_scrapy_微信公众号爬虫_微信采集_公_weixin_crawler-1
高效微信公众号历史文章和阅读数据爬虫powered by scrapy
使用 scrapy selenium 爬取微信公众号
本次实战对抓取的公众号没有限制,但不同公众号每次抓取之前都要进行分析。打开Fiddler,将手机配置好相关代理,为避免干扰过多,这里给Fiddler加个过滤规则,只需要指定微信域名mp.weixin.qq.com就好: Fiddler...
最近在学习Python3网络爬虫开发实践(崔庆才 著)刚好也学习到他使用代理爬取公众号文章这里,但是照着他的代码写,出现了一些问题。在这里我用到了这本书的前面讲的一些内容进行了完善。(作者写这个代码已经是半年...
爬虫框架为Scrapy并且实际用到了Scrapy的诸多特性,是深入学习Scrapy的不错开源项目 利用Flask、Flask-socketio、Vue实现了高可用性的UI界面。功能强大实用,是新媒体运营等岗位不错的数据助手 得益于Scrapy、...
"基于Scrapy的分布式数据采集与分析——以知乎话题为例" 本文主要介绍了基于Scrapy框架的分布式数据采集与分析方法,以知乎话题为例。该方法通过实现主从式结构的分布式网络爬虫,运用开源项目Scrapy-Redis来部署...
Scrapy是一个强大的Python爬虫框架,它为开发者提供了一套完整的解决方案来构建和管理网络爬虫项目。在“scrapy爬取豆瓣,携程代码,动态加载页面等”这个主题中,我们将深入探讨如何使用Scrapy处理动态加载页面,...
虽然scrapy能够完美且快速的抓取静态页面,但是在现实中,目前绝大多数网站的页面都是动态页面,动态页面中的部分内容是浏览器运行页面中的JavaScript脚本动态生成的,爬取相对困难; 比如你信心满满的写好了一个...
爬取微博需要以字典的形式设置自己的cookie。用于初学者学习,分别用了bf4和xpath,数据处理还不完善,存入了mysql数据库,改写sql语句就可以写入自己的表中
Scrapy框架是一个强大的Python爬虫框架,专为数据抓取和网页解析设计。它构建在Twisted异步网络库之上,使得爬虫可以处理大量并发请求,极大地提高了爬取速度。在"scrapy框架-表情包爬虫"项目中,开发者利用了Scrapy...
在本篇【Python爬虫实例——scrapy框架爬取拉勾网招聘信息】中,我们将探讨如何使用Python的Scrapy框架来抓取拉勾网上的Python相关职位信息。首先,我们需要理解整个爬取流程和分析思路。 1. **分析查询结果页**: ...
Scrapy是一个强大的Python爬虫框架,它为开发者提供了一套完整的解决方案来构建网络爬虫,高效地抓取网页数据并进行处理。在这个“用scrapy框架实现京东手机信息爬取”的项目中,我们主要涉及以下几个关键知识点: ...
包含:淘宝商品、微信公众号、大众点评、招聘网站、闲鱼、阿里任务、scrapy博客园、微博、百度贴吧、豆瓣电影、包图网、全景网、豆瓣音乐、某省药监局、搜狐新闻、机器学习文本采集、fofa资产采集、汽车之家、国家...
4. **蜘蛛(Spider)**:负责从特定网页中提取所需的信息(实体Item),也可以从中提取新的链接以便进一步抓取。 5. **项目管道(Pipeline)**:处理蜘蛛抽取的数据,通常包括数据持久化、数据清洗等任务。 6. **...
Python网络爬虫是一种用于自动化网页数据抓取的技术,它能够高效地从互联网上获取大量信息。本套教学资料深入解析了Python爬虫的核心技术、Scrapy框架以及分布式爬虫的实现,旨在帮助学习者掌握这一领域的核心技能。...
Python优秀项目 基于Flask+robot的微信公众号系统源码+部署文档+全部数据资料.zip 1、代码压缩包内容 代码的项目文件 部署文档文件 2、代码运行版本 python3.7或者3.7以上的版本;若运行有误,根据提示GPT修改;若...
本文关注的是利用Scrapy框架构建一个针对易车网站的数据采集系统,旨在实现多用户管理、数据分层管理和去重功能,同时结合Django搭建后台框架,使用Pandas进行数据分析,并通过Echarts进行数据可视化展示。...