基于Scrapy框架的网络爬虫实现与数据抓取分析外文翻译资料

 2022-11-20 16:38:36

英语原文共 7 页,剩余内容已隐藏,支付完成后下载完整资料


选择 SCRAPY

Daniel Myers and James W. McGuffee

摘要:Scrapy是一个用Python实现的开源Web爬虫平台。作为本科研究项目的一部分,第一作者使用Scrapy创建了一个网页爬虫,利用正则表达式从地理位置有针对性的网站上提取相关数据。这个学生项目是属于一个比较大、长期研究项目的一部分,其目的是为了确定创建交互式地理约束社会服务客户匹配系统的可行性。本文描述了选择Scrapy作为此项目的原因,并探讨了Scrapy作为计算科学本科项目的强大和工具的可行性。

1. 背景和动机

这里有许多的组织和团体会提供社会服务。这些组织可能是政府的,非营利的或者是狭隘的。提供的服务可能是长期化的制度化支持,季节性的(例如:假日用餐)或者有限的时间利益。社会服务的受益者可能受到年龄,性别,家庭状况,公民身份和收入的限制。

鉴于这种多变性,我们预想一下创建交互式在线地理约束社会服务客户匹配系统的实用性。在这个系统中,客户端(或者代表客户端的社会工作者)将输入基本的人口统计信息,并且系统将在满足客户陈述的需求的特定地理区域内返回一组可用的社会服务。除了明显的社会效益之外,这个项目很有吸引力,因为它符合教学需要。也就是说,为了确定一个长期可持续的项目,这个项目并不平凡,但本科生也可以在发展中做出重大贡献。早期阶段让STEM学生参与研究的好处已经得到很好的证明。

在本文的下一部分中,我们将广泛的概述从Web上提取地理信息时所遇到的工作和遇到的挑战。在第3节中,我们简要介绍Scrapy,一种使用Python编程语言实现的开源框架。第四部分详细介绍了2014年春季开展的学生项目。

2. 地理位置和网络内容相关联的历史

在1999年早期,由Orkut Buyukkoten领导的一个团队用他们编写的Java应用程序来证明从网页提取地理位置信息的可行性。他们意识到尝试通过分析网络IP地址来确定地理信息是有问题的,因为使用远程主机服务中的许多网站中,他们的网络的物理位置与网站内容的地理位置无关。该团队认为,确定网站信息的地理位置的更准确的方法是尝试从网站提取邮政编码。

2000年,Ding,Gravano和Shivakumar正式将网络资源的地理范围描述为w的创建者易于到达的地理区域。为了解释作者意图,Ding及其合作者主张检查网页超链接地理分布的有用性,以帮助确定页面的地理范围。这个想法是通过检查链接到页面的位置使得你可以开始分析特定网站的地理范围。通过检查页面的文本内容和引用页面的超链接的地理分布,他们试图创建一个更加个性化的搜索引擎,以便根据地理位置限制浏览相关性。

2004年,Web-A-Where项目根据网页的情境化内容创建了一个地名录。该项目的目标是找到任何提及的地点,并确定被引用的确切地理位置。该项目的作者描述了两个主要的歧义类型,为这一过程增添了挑战。第一个含糊之处是,一个词可以具有地理意义和非地理意义(例如土耳其语)。第二个含糊之处是,一个词可以引用两个或更多不同的地理位置(例如斯普林菲尔德)。尽管面临这些挑战,Web-A-Where项目在创建地名词典中报告的精度高达82%。

与Web-A-Where项目相比,Wang和他的同事开发了一个系统,根据超链接和用户日志的结构创建地名词典。2006年,Tezuka及其同事批评该领域以前的工作仅仅是肤浅的,仅仅是当前GIS技术的延伸。他们认为,为了更好地理解网站的地理覆盖范围,需要了解并分析用户的地理位置和该用户的地理搜索历史记录。

最近,在2011年,Sengstock和Gertz提出了一个使用距离统计来确定网络上地理信息源的系统。他们提出使用空间邻近关系,如共位模式和空间关联规则。Sengstock和Gertz展示了用不同的地理语义来确定一组地理特征的可行性。

从过去十五年的项目回顾可以看出,已经有很多尝试来识别与网站相关的地理信息。然而,对于解决这个问题的最佳方式还没有达成共识。此外,在这方面所做的大部分工作都属于我们研究项目范围之外的领域(例如:一个在线报纸的读者的地理范围)。我们的项目的目标更为有限且狭义。具体而言,我们希望研究使用Scrapy(一种开源工具)基于地理过滤器进行数据挖掘的可行性。我们的项目试图评估使用Scrapy作为一种地理上限制从网页上抓取数据的工具的可行性。具体来说,该项目想测试用邮政编码的地理限制来抓取数据是多么容易。

3. SCRAPY

Scrapy是一个用Python编写的开源Web爬虫框架。主要目的是为网络抓取提供支持。Scrapy于2008年6月2日首次发布,截至2015年3月,最新版本为Scrapy 0.24,并且与Python 2.7兼容。有几个正在进行的基于Scrapy的项目,许多公司都使用Scrapy作为爬虫的工具。其中一些公司是CareerBuilder,DayWatch,PriceWiki和Tarlabs。

Scrapy是一个集成系统,它包含一个控制所有组件之间数据流的引擎,一个接收请求的调度程序,一个获取网页的下载程序以及用户编写的用于解析响应和提取项目的自定义类(称为spiders)。有关Scrapy的图形概述,显示这些部分如何相互交互,请访问doc.scrapy.org/en/latest/topics/architecture.html。

从Web捕获和开采的数据的任务通常分为两个截然不同的阶段:任务的爬取和数据获取部分。对于这个项目,Scrapy非常理想,因为它是一个基于Python的框架,提供了抓取和抓取工具。选择Scrapy也是因为需要成为Scrapy的合格用户的学习曲线。该学生最初考虑了几种平台和工具,但Scrapy是最直接学习和实施的平台和工具。此外,作为开源产品,Scrapy拥有一个强大的社区,愿意并且能够帮助新用户。

4. 学生项目

这个项目的主要重点是编写一个网络爬虫,利用正则表达式从地理上有针对性的网站提取相关数据。具体而言,学生撰写的项目使用Scrapy在北肯塔基州三个特定县(布恩,肯顿和坎贝尔)的邮政编码中查找所有网址提及的物理地址。这个项目的两个主要任务是创建一个Scrapy项目并使用来管理数据Scrapy的spiders类来获取数据。

在Scrapy中,spiders是定义哪些网站将被抓取,如何抓取它们以及将数据收集并放入容器内。我们的爬虫旨在从HTML页面中提取街道地址。它首先查找在外部文件中定义的布恩,肯顿或坎贝尔县的邮政编码。在识别邮政编码后,搜寻器会查找包含州,城市和街道地址的字符串。蜘蛛类的完整源代码如下:

class locationSpider(Spider):

#Name of spider

name='location'

# Define URLs to search

gsearch = pygoogle(campbell county social services)

start_urls = gsearch.get_urls()

def parse(self, response):

# Set up xpath selectors

addresses = hxs.xpath('//*/text()')

# Create list to hold results

items = []

# Define regular expression for finding zip codes.

nky_zip_regex = re.compile(r( |.join(locationSpider.zip_codes) r), re.IGNORECASE)

for current in addresses: item = LocationCrawlerItem()

# If crawler identifies a zip code, try to get all data from current node.

zip_string = re.search(nky_zip_regex, current.extract())

if(zip_string):

# Store page title and zip code in the LocationCrawlerItem

# Compile regex statements for finding state followed by a valid zip code.

state_abb_regex = re.compile(rky[.,]? re.escape(item[“zip”]), re.IGNORECASE)

state_proper_regex = re.compile(rkentucky re.escape(item[“zip”]), re.IGNORECASE)

# Search current for regex patterns

# If state abbreviation is found, place it in the LocationCrawlerItem

if(state_abb_string):

item['state'] = 'Ky'

temp_address_str = state_abb_string.group()

elif(state_proper_string):

item['state'] = 'Kentucky'

temp_address_str = state_proper_string.group()

else:

item['state'] = None

temp_address_str = None

# Compile regex statement to find city and execute.

city_regex = re.compile(r( |.join(locationSpider.cities) [,]? re.escape(temp_address_str) r), re.IGNORECASE)

city_string = re.search(city_regex, current.extract())

if(city_string):

street_address_regex = re.compile(r([0-9] )([A-Za-z ] ), re.IGNORECASE)

street_address_string = re.search(street_address_regex,current.extract())

if(street_address_string):

item[“street_address”] = street_address_string.group() else:

item[“street_address”] = None

items.append(item)

return items

在抓取并确定要刮取哪些页面之后,使用了项目对象。在Scrapy中,该项目定义了一个放置数据的对象。这允许抓取工具从非结构化数据源中提取结构化数据。在提供的示例中,我们试图提取识别单个物理地址所需的所有信息并将其放入项目中。该项目可以稍后用于将数据放入数据库或以JSON,XML或CSV格式打印到文件中。

class LocationCrawlerItem(Item):

page_title = Field()

street_address = Field()

city = Field()

state = Field()

zip = Field()

这个有限范围的项目证明了使用Scrapy作为创建交互式地理约束社会服务客户匹配系统的项目的一部分的可行性。该项目的下一阶段将涉及验证数据,并添加过滤器,试图从所有其他与邮政编码相关的日期消除与可行的社会服务相关的数据。换句话说,通过抓取收集的信息对应关于真实世界组织和服务提供的可靠的当前信息?

5. 结论

通过使用开源工具Scrapy,当搜

剩余内容已隐藏,支付完成后下载完整资料


资料编号:[23045],资料为PDF文档或Word文档,PDF文档可免费转换为Word

您需要先支付 30元 才能查看全部内容!立即支付

课题毕业论文、外文翻译、任务书、文献综述、开题报告、程序设计、图纸设计等资料可联系客服协助查找。