网络爬虫(Web Crawler)是一种自动化程序,可以在互联网上自动地抓取数据。它可以自动地访问网站,并记录下访问结果,在结果中找到有用的信息。相比于人工的方法,网络爬虫可以实现高效、快速、自动化地获取数据。
以下是使用Python实现一个网络爬虫的一般步骤:
-
确定需要爬取数据的目标网站。首先需要确定所要爬取的网站的URL,并掌握该网站的HTML结构,例如每个页面中所包含的数据、数据的存储方式以及分页等信息。
-
发送HTTP请求获取网页源代码。利用Python中的requests库向目标网站发送HTTP请求,获取到网页源代码,得到HTML字符串。
-
解析网页源代码,提取有用信息。使用BeautifulSoup库或正则表达式对网页HTML进行解析,并提取出所需要的信息。BeautifulSoup是一个HTML和XML的解析库,它能够根据HTML标记的格式自动将数据解析出来,提取HTML内容。
-
存储提取到的信息。将提取到的信息存储到本地或数据库中。
下面列举两个实例说明:
- 爬取豆瓣电影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进行解析,并提取出所需要的电影名称和评分信息。最后,将提取到的信息打印输出并存储到本地。
- 爬取天气信息
下面是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进行解析,并提取出所需要的天气信息。最后,将提取到的信息打印输出。