欢迎访问宙启技术站
智能推送

利用Python和Haskell实现网络爬虫的案例

发布时间:2023-12-09 09:20:01

网络爬虫是指自动获取互联网上特定网页内容的程序。Python和Haskell都是利用它们的强大功能和库来构建网络爬虫的理想选择。下面我们将分别介绍如何使用Python和Haskell实现一个简单的网络爬虫,并提供相应的代码示例。

Python实现网络爬虫:

Python是一门易学易用的编程语言,并且有着丰富的网络爬虫库和工具。我们可以使用Python的requests库来发送HTTP请求并获取网页内容,使用BeautifulSoup库来解析HTML文档,进而提取我们需要的数据。

示例1:使用Python实现一个简单的网络爬虫,爬取豆瓣电影TOP250的电影名称和评分。

import requests
from bs4 import BeautifulSoup

def crawl_douban_movie_top250():
    data = []
    url = 'https://movie.douban.com/top250'
    response = requests.get(url)
    soup = BeautifulSoup(response.text, 'html.parser')
    movie_list = soup.find('ol', class_='grid_view').find_all('li')
    for movie in movie_list:
        title = movie.find('span', class_='title').text
        rating = movie.find('span', class_='rating_num').text
        data.append((title, rating))
    return data

if __name__ == '__main__':
    movie_data = crawl_douban_movie_top250()
    for title, rating in movie_data:
        print('电影名称:', title)
        print('评分:', rating)
        print('-----------')

上述示例中,我们首先使用requests库发送HTTP请求获取豆瓣电影TOP250的网页内容,并使用BeautifulSoup库解析HTML文档。然后,通过查找指定的HTML元素,得到电影名称和评分,并将它们保存在一个列表中,最后进行输出。

Haskell实现网络爬虫:

Haskell是一种静态类型的纯函数式编程语言,具有强大的类型系统和表达能力。我们可以使用Haskell的网络库和HTML解析库来实现网络爬虫。

示例2:使用Haskell实现一个简单的网络爬虫,爬取豆瓣电影TOP250的电影名称和评分。

import Network.HTTP
import Text.HTML.TagSoup

type Movie = (String, String)

crawlDoubanMovieTop250 :: IO [Movie]
crawlDoubanMovieTop250 = do
  response <- simpleHTTP $ getRequest "https://movie.douban.com/top250"
  body <- getResponseBody response
  let tags = parseTags body
  let movieTags = sections (~== "<ol class=\"grid_view\">") tags !! 1
  let movieList = drop 1 $ partitions (~== "<li>") movieTags
  return $ map parseMovie movieList
  where
    parseMovie movie = (getText (take 1 titleTags), getText ratingTags)
      where
        titleTags = sections (~== "<span class=\"title\">") movie !! 1
        ratingTags = sections (~== "<span class=\"rating_num\">") movie !! 0

main :: IO ()
main = do
  movieData <- crawlDoubanMovieTop250
  mapM_ printMovie movieData
  where
    printMovie (title, rating) = do
      putStrLn $ "电影名称:" ++ title
      putStrLn $ "评分:" ++ rating
      putStrLn "-----------"

上述示例中,我们使用了Haskell的网络库和HTML解析库。首先,使用simpleHTTP函数发送HTTP请求获取豆瓣电影TOP250的网页内容,并使用getResponseBody函数获取HTTP响应的主体。然后,使用parseTags函数将HTML文档解析为标签列表,通过查找指定的标签,得到电影名称和评分,并将它们保存在一个列表中,最后进行输出。

以上就是使用Python和Haskell实现网络爬虫的简单案例。通过这些示例,我们可以看到Python和Haskell都能很好地实现网络爬虫,并且能够很方便地处理HTML文档和提取需要的数据。由于网络爬虫的复杂性和涉及到的问题众多,实际应用时还需要更多的代码和处理,但这些示例可以作为开始学习和实践网络爬虫的良好起点。