使用yield优雅抓取网页分页数据
在使用Python来抓取网页数据的时候,常常碰到分页数据,其中部分下一页按钮已经有具体的链接地址,而另外的可能是javascript来处理分页的。这要求同时能解析页面内容,又要采集下一页的url。怎样优雅用python写这样的代码呢?或者说怎样更pythonic?
下面分别给出部分代码实例
def get_next_page(obj): '''get next page content from a url or another content ''' error_occurred = False for retry2 in xrange(3): try: if isinstance(obj, (basestring, unicode)): resp = curr_session.get(obj, timeout=TIMEOUT, headers=headers, cookies=cookies, allow_redirects=True) content = resp.content save_html_content(obj, content) error_occurred = False else: content = obj soup = BeautifulSoup(content, features='html5lib', from_encoding="utf8") e_next_page = soup.find('a', text="下頁") break except: error_occurred = True time.sleep(2) if error_occurred: yield content return if e_next_page: next_url = "http://www.etnet.com.hk" + e_next_page.get('href') time.sleep(2) yield content for i in get_next_page(next_url): yield i else: yield content
def get_next_page(obj, page=1): '''get next page content from a url or another content ''' error_occurred = False for retry2 in xrange(3): try: if isinstance(obj, (basestring, unicode)): resp = curr_session.get(obj, timeout=TIMEOUT, headers=headers, cookies=cookies, allow_redirects=True) content = resp.content save_html_content(obj, content) hrefs = re.findall('industrysymbol=.*&market_id=[^;]+', content) if page == 1 and (not "sh=" in obj) and hrefs: reset_url = ("http://www.aastocks.com/tc/cnhk/market/industry" "/sector-industry-details.aspx?%s&page=1" % \ (hrefs[0].replace('sh=1', 'sh=0').replace('&page=', '') \ .replace("'", '').split()[0])) for next_page in get_next_page(reset_url): yield next_page return error_occurred = False else: content = obj soup = BeautifulSoup(content, features='html5lib', from_encoding="utf8") e_next_page = soup.find('td', text="下一頁 ") break except: error_occurred = True LOG.error(traceback.format_exc()) time.sleep(2) if error_occurred: yield content return if e_next_page: hrefs = re.findall('industrysymbol=.*&market_id=[^;]+', content) if hrefs: next_url = ("http://www.aastocks.com/tc/cnhk/market/industry/sector-industry" "-details.aspx?%s&page=%d" % \ (hrefs[0].replace('sh=1', 'sh=0') \ .replace('&page=', '').replace("'", '').split()[0], page+1)) time.sleep(2) yield content for next_page in get_next_page(next_url, page+1): yield next_page else: yield content
for curr_href in e_href: retry_interval = random.randint(MIN_INTERVAL_SECONDS_FOR_RETRIEVING, MAX_INTERVAL_SECONDS_FOR_RETRIEVING) time.sleep(retry_interval) contents = get_next_page(curr_href) for content in contents: get_page_data(content)
相关推荐
在这个"scrapy分页及详情页数据爬取"的项目中,我们主要关注如何使用Scrapy来实现对51job网站的主页和详情页的数据抓取,并将数据保存到日志文件中。 首先,我们需要创建一个Scrapy项目。通过运行`scrapy ...
在Python编程领域,爬虫技术...这个实例不仅展示了Python Scrapy框架的基本使用,还涵盖了网页数据的提取、爬虫的分页处理以及数据存储等关键环节,对于学习Python爬虫和金融数据分析的人来说是非常有价值的实践案例。
Python爬虫技术是数据获取的重要工具,特别是在网络资源丰富的今天,它被广泛应用于网页信息抓取、数据分析等领域。Scrapy框架则是Python爬虫开发中的一个高效解决方案,特别适合大规模、结构化的网页抓取任务。本篇...
在Python的Web爬虫领域,Scrapy是一个强大而高效的框架,常用于构建数据抓取项目。它提供了丰富的功能,如请求调度、中间件处理、数据清洗等,使得爬虫开发变得更加便捷。而MySQL作为流行的开源关系型数据库,常用于...
Python爬虫技术在数据获取和信息挖掘领域中扮演着重要角色,而Scrapy是一个功能强大的Python爬虫框架,尤其适合大型、复杂的网络抓取任务。本项目“Python爬虫-当当网玄幻书籍信息的爬取”是针对初学者的一次实践...
Scrapy 是一个强大的 Python 网络爬虫框架,它为开发者提供了构建高效、可扩展的网络爬虫的工具。在这个“scrapy 封装的爬取社保信息”项目中,我们将探讨如何利用 Scrapy 框架来抓取与社保相关的数据。社保信息通常...
Scrapy是一个强大的Python爬虫框架,它为网络数据抓取提供了高效的工具集,适用于复杂的网页抓取任务。本文将深入探讨如何使用Scrapy框架来爬取文章网站的源码,并结合提供的`seventeen_news`项目,帮助初学者快速...
Scrapy是一个强大的Python框架,专为爬取网站并从中提取结构化数据而设计。它提供了高效、可扩展的工具,让开发者能够轻松地构建网络爬虫项目,处理大量的网页数据。在本文中,我们将深入探讨如何使用Scrapy来构建一...
Scrapy是一个强大的Python爬虫框架,它为开发者提供了一套高效、灵活的工具,使得构建网络爬虫变得简单。在本教程中,我们将探讨如何利用Scrapy来爬取"唯美女生"网站上的美女图片资源,并将这些图片保存到本地。 ...
Scrapy是一个强大的Python框架,专为爬取网站并提取结构化数据而设计。在这个名为"Python-爬取百度图片的scrapy爬虫实现"的项目中,我们将深入探讨如何使用Scrapy来抓取百度图片。首先,让我们了解Scrapy的基本架构...
Scrapy是一个强大的Python爬虫框架,它简化了网络爬虫的开发过程,使得数据抓取、处理和存储变得更加高效。 首先,要开始一个Scrapy项目,你需要在命令行中使用`scrapy startproject [project_name]`命令创建一个新...
Scrapy是一个强大的Python爬虫框架,它为开发者提供了一套高效、灵活的工具,用于抓取网页并提取结构化数据。在这个"scrapy爬取某股票网站入门实例"中,我们将学习如何使用Scrapy来抓取股票网站上的股票ID和名称。...
`Python Scrapy` 是一个强大的、开源的网络爬虫框架,用于高效地抓取网站数据。它以其模块化的设计和丰富的功能而受到广大开发者喜爱,尤其适合处理大规模的数据抓取任务。在这个项目中,我们将深入探讨如何使用...
Scrapy是一个强大的Python爬虫框架,专为数据抓取和数据处理设计,广泛应用于Web页面内容提取、数据挖掘以及搜索引擎索引等任务。本项目是一个关于HR(人力资源)网站的数据抓取实例,通过使用Scrapy,我们可以高效...
Scrapy是一个强大的Python爬虫框架,它提供了一个完整的框架,使得开发者能够专注于爬虫的核心逻辑,而无需处理网络请求、数据解析等琐碎问题。要使用Scrapy,首先需要安装它,通常通过Python的包管理器pip进行: `...
Scrapy是一个强大的Python爬虫框架,它为开发者提供了一套高效、灵活的工具,用于爬取网站并提取结构化数据。在这个项目中,我们利用Scrapy来爬取伯乐在线的文章,并将抓取到的数据存储到MySQL数据库中,实现数据的...
Scrapy是一个强大的Python爬虫框架,它为开发者提供了一套高效、灵活的工具,用于爬取网站并提取结构化数据。伯乐在线是一个知名的IT技术社区,包含了大量的技术文章和资源,非常适合用作爬虫练习的目标。下面我们将...
Scrapy是一个强大的Python爬虫框架,它为网络数据抓取提供了高效的工具和API,使得开发者可以专注于编写爬取逻辑,而无需关注底层实现。在这个简单的Scrapy demo中,我们将探讨如何搭建一个基本的Scrapy项目,理解其...
Scrapy是一个强大的Python爬虫框架,它为开发者提供了一套完整的解决方案来构建网络爬虫,高效地抓取网站数据并进行处理。51前程无忧是中国知名的招聘网站,其丰富的职位信息对于数据分析、市场研究等领域具有重要...