python通过链接抓取网站详解

 更新时间:2019年11月20日 15:10:30   投稿:laozhang  
在本篇文章里小编给大家整理的是关于python通过链接抓取网站的详细方法和知识点,需要的朋友们学习下。

在本篇文章里,你将会学习把这些基本方法融合到一个更灵活的网站 爬虫中,该爬虫可以跟踪任意遵循特定 URL 模式的链接。

这种爬虫非常适用于从一个网站抓取所有数据的项目,而不适用于从特 定搜索结果或页面列表抓取数据的项目。它还非常适用于网站页面组织 得很糟糕或者非常分散的情况。

这些类型的爬虫并不需要像上一节通过搜索页面进行抓取中采用的定位 链接的结构化方法,因此在 Website 对象中不需要包含描述搜索页面 的属性。但是由于爬虫并不知道待寻找的链接的位置,所以你需要一些 规则来告诉它选择哪种页面。你可以用 targetPattern(目标 URL 的 正则表达式)和布尔变量 absoluteUrl 来达成这一目标:

class Website:  
def __init__(self, name, url, targetPattern, absoluteUrl,    
titleTag, bodyTag):    
self.name = name    
self.url = url    
self.targetPattern = targetPattern    
self.absoluteUrl=absoluteUrl    
self.titleTag = titleTag    
self.bodyTag = bodyTag
class Content:  
def __init__(self, url, title, body):    
self.url = url    
self.title = title    
self.body = body
def print(self):    
print("URL: {}".format(self.url))    
print("TITLE: {}".format(self.title))    
print("BODY:\n{}".format(self.body))

Content 类和第一个爬虫例子中使用的是一样的。

Crawler 类从每个网站的主页开始,定位内链,并解析在每个内链页面 发现的内容:

import re
class Crawler:  
def __init__(self, site):    
self.site = site    
self.visited = []
def getPage(self, url):    
try:
req = requests.get(url)    
except requests.exceptions.RequestException:      
return None
return BeautifulSoup(req.text, 'html.parser')
def safeGet(self, pageObj, selector):
selectedElems = pageObj.select(selector)
if selectedElems is not None and len(selectedElems) > 0:
return '\n'.join([elem.get_text() for
elem in selectedElems])
return ''
def parse(self, url):
bs = self.getPage(url)
if bs is not None:
title = self.safeGet(bs, self.site.titleTag)
body = self.safeGet(bs, self.site.bodyTag)
if title != '' and body != '':
content = Content(url, title, body)
content.print()
def crawl(self):
"""
获取网站主页的页面链接
"""
bs = self.getPage(self.site.url)
targetPages = bs.findAll('a',
href=re.compile(self.site.targetPattern))
for targetPage in targetPages:
targetPage = targetPage.attrs['href']
if targetPage not in self.visited:
self.visited.append(targetPage)
if not self.site.absoluteUrl:
targetPage = '{}{}'.format(self.site.url, targetPage)
self.parse(targetPage)
reuters = Website('Reuters', 'https://www.reuters.com', '^(/article/)', False,
'h1', 'div.StandardArticleBody_body_1gnLA') 
crawler = Crawler(reuters) 
crawler.crawl()

与前面的例子相比,这里的另外一个变化是:Website 对象(在这个例 子中是变量 reuters)是 Crawler 对象本身的一个属性。这样做的作 用是将已访问过的页面存储在爬虫中,但是也意味着必须针对每个网站 实例化一个新的爬虫,而不是重用一个爬虫去抓取网站列表。

不管你是选择一个与网站无关的爬虫,还是将网站作为爬虫的一个属 性,这都是一个需要根据自身需求进行权衡的决定。两种方法在功能实 现上都是没有问题的。

另外需要注意的是,这个爬虫会从主页开始抓取,但是在所有页面都被 记录后,就不会继续抓取了。你可能希望编写一个爬虫,将第 3 章中介 绍的某种模式融合进来,然后查看所访问的每个页面中更多的目标 URL。你甚至还可以跟踪每个页面中涉及的所有 URL(不仅仅是匹配 目标模式的 URL),然后查看这些 URL 是否包含目标模式。

以上就是关于python抓取网站的相关知识点内容,感谢大家的学习和对脚本之家的支持。

相关文章

  • python修改list中所有元素类型的三种方法

    python修改list中所有元素类型的三种方法

    下面小编就为大家分享一篇python修改list中所有元素类型的三种方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-04-04
  • django2.2安装错误最全的解决方案(小结)

    django2.2安装错误最全的解决方案(小结)

    这篇文章主要介绍了django2.2安装错误最全的解决方案(小结),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-09-09
  • Python字符串的基本操作方法(非常详细)

    Python字符串的基本操作方法(非常详细)

    字符串是python中最常见的数据类型,创建字符串只需用引号括起来分配给一个变量即可,这篇文章主要给大家介绍了关于Python字符串的基本操作方法的相关资料,文中通过图文介绍的非常详细,需要的朋友可以参考下
    2023-11-11
  • 使用Python画了一棵圣诞树的实例代码

    使用Python画了一棵圣诞树的实例代码

    这篇文章主要介绍了使用Python画了一棵圣诞树的实例代码,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-11-11
  • Python根据区号生成手机号码的方法

    Python根据区号生成手机号码的方法

    这篇文章主要介绍了Python根据区号生成手机号码的方法,涉及Python随机数与字符串的相关操作技巧,需要的朋友可以参考下
    2015-07-07
  • Python序列对象与String类型内置方法详解

    Python序列对象与String类型内置方法详解

    这篇文章主要介绍了Python序列对象与String类型内置方法,结合实例形式分析了Python序列对象与String类型各种常见内置方法相关使用技巧及操作注意事项,需要的朋友可以参考下
    2019-10-10
  • Python NumPy实现数组搜索示例详解

    Python NumPy实现数组搜索示例详解

    NumPy是一个开源的Python科学计算库,使用NumPy可以很自然地使用数组和矩阵,这篇文章主要介绍了使用NumPy实现数组搜索,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习吧
    2023-05-05
  • Python数据分析之真实IP请求Pandas详解

    Python数据分析之真实IP请求Pandas详解

    这篇文章主要给大家介绍了Python数据分析之真实IP请求Pandas,文中通过示例嗲吗给大家介绍的很详细,相信对大家的学习或者理解具有一定的参考借鉴价值,有需要的朋友们可以参考借鉴,下面来一起学习学习吧。
    2016-11-11
  • python游戏地图最短路径求解

    python游戏地图最短路径求解

    这篇文章主要为大家详细介绍了python游戏地图最短路径的求解,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-01-01
  • Python利用Selenium实现自动观看学习通视频

    Python利用Selenium实现自动观看学习通视频

    Selenium是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。本文主要介绍了利用Selenium实现自动观看学习通视频,需要的同学可以参考一下
    2021-12-12

最新评论