利用Python和Haskell实现网络爬虫的案例
网络爬虫是指自动获取互联网上特定网页内容的程序。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文档和提取需要的数据。由于网络爬虫的复杂性和涉及到的问题众多,实际应用时还需要更多的代码和处理,但这些示例可以作为开始学习和实践网络爬虫的良好起点。
