什么是网络爬虫?

  • Post category:Python

网络爬虫(Web Crawler)是一种自动化程序,可以在互联网上自动地抓取数据。它可以自动地访问网站,并记录下访问结果,在结果中找到有用的信息。相比于人工的方法,网络爬虫可以实现高效、快速、自动化地获取数据。

以下是使用Python实现一个网络爬虫的一般步骤:

  1. 确定需要爬取数据的目标网站。首先需要确定所要爬取的网站的URL,并掌握该网站的HTML结构,例如每个页面中所包含的数据、数据的存储方式以及分页等信息。

  2. 发送HTTP请求获取网页源代码。利用Python中的requests库向目标网站发送HTTP请求,获取到网页源代码,得到HTML字符串。

  3. 解析网页源代码,提取有用信息。使用BeautifulSoup库或正则表达式对网页HTML进行解析,并提取出所需要的信息。BeautifulSoup是一个HTML和XML的解析库,它能够根据HTML标记的格式自动将数据解析出来,提取HTML内容。

  4. 存储提取到的信息。将提取到的信息存储到本地或数据库中。

下面列举两个实例说明:

  1. 爬取豆瓣电影top250

下面是Python代码:

import requests
from bs4 import BeautifulSoup

# 发送HTTP请求
def get_html(url):
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'}
    resp = requests.get(url, headers=headers)
    # 返回网页源代码
    return resp.text

# 解析网页源代码,提取有用信息
def parse_html(html):
    soup = BeautifulSoup(html, 'html.parser')
    movie_list = soup.find('ol', class_='grid_view').find_all('li')
    for movie in movie_list:
        name = movie.find('span', class_='title').text
        score = movie.find('span', class_='rating_num').text
        print('{} {}分'.format(name, score))

# 将提取到的信息存储到本地
def save_to_local(info):
    with open('douban_top250.txt', 'a', encoding='utf-8') as f:
        f.write(info + '\n')

if __name__ == '__main__':
    for i in range(10):
        url = 'https://movie.douban.com/top250?start={}&filter='.format(i*25)
        html = get_html(url)
        parse_html(html)

代码中使用requests库向豆瓣电影top250网站发送HTTP请求,获取到网页源代码。然后,使用BeautifulSoup库对网页HTML进行解析,并提取出所需要的电影名称和评分信息。最后,将提取到的信息打印输出并存储到本地。

  1. 爬取天气信息

下面是Python代码:

import requests
from bs4 import BeautifulSoup

# 发送HTTP请求
def get_html(url):
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'}
    resp = requests.get(url, headers=headers)
    # 返回网页源代码
    return resp.text

# 解析网页源代码,提取有用信息
def parse_html(html):
    soup = BeautifulSoup(html, 'html.parser')
    city = soup.find('dd', class_='name').find('h2').text
    content = soup.find('div', class_='sky')
    date_list = content.find_all('h1')
    weather_list = content.find_all('p', class_='wea')
    temperature_list = content.find_all('p', class_='tem')
    for i, date in enumerate(date_list):
        weather = weather_list[i].text
        temperature = temperature_list[i].find('span').text + '/' + temperature_list[i].find_all('span')[-1].text
        print('{} {} {}'.format(date.text, weather, temperature))

if __name__ == '__main__':
    url = 'http://www.weather.com.cn/weather/101210101.shtml'
    html = get_html(url)
    parse_html(html)

代码中同样使用requests库向中国天气网站发送HTTP请求,获取天气情况的HTML源代码。然后,使用BeautifulSoup库对网页HTML进行解析,并提取出所需要的天气信息。最后,将提取到的信息打印输出。