10个python爬虫入门基础代码实例 + 1个简单的pyth

1. 爬虫基础知识

爬虫是指通过程序自动获取网站上的信息,通常使用Python语言编写。在进行爬虫之前,需要先了解一些基本概念。

1.1 URL

URL(统一资源定位符)是指用于定位互联网上资源的地址,例如:https://www.baidu.com。

1.2 HTTP协议

HTTP协议是指用于在互联网上传输超文本的应用层协议。爬虫通过HTTP协议发送请求并获取网页内容。

1.3 解析HTML

HTML是网页的标记语言,爬虫需要解析HTML语言才能获取网页上的信息。常用的HTML解析器有BeautifulSoup和lxml。

2. 爬取静态网页

静态网页是指网页源代码不会改变的网页,爬虫可以通过解析HTML代码来获取网页上的信息。

2.1 使用requests库发送HTTP请求

在Python中,可以使用requests库来发送HTTP请求并获取服务器的响应。下面是一个使用requests库获取百度首页内容的实例:

import requests

url = 'https://www.baidu.com'

response = requests.get(url)

print(response.text)

在上面的代码中,首先定义了要获取的URL地址,然后使用requests库的get方法向服务器发送HTTP请求并获取响应。最后打印出了响应的文本内容。

2.2 解析HTML

在获取网页响应之后,需要使用HTML解析器来解析HTML代码并获取网页上的信息。下面是一个使用BeautifulSoup解析HTML代码的实例:

from bs4 import BeautifulSoup

url = 'https://www.baidu.com'

response = requests.get(url)

soup = BeautifulSoup(response.text, 'lxml')

print(soup.title.string)

在上面的代码中,首先导入了BeautifulSoup库,然后使用BeautifulSoup解析了HTTP响应的HTML代码。最后打印出了网页的标题。

3. 爬取动态网页

动态网页是指网页上的内容是通过JavaScript动态生成的,爬虫无法直接获取网页上的信息。需要使用模拟浏览器的方式来获取网页内容。

3.1 使用selenium模拟浏览器

selenium是一款可以用来自动化测试Web应用程序的工具,在爬虫中也可以使用它来模拟浏览器获取网页内容。下面是一个使用selenium模拟浏览器获取股票信息的实例:

from selenium import webdriver

browser = webdriver.Chrome()

browser.get('http://quote.eastmoney.com/sh600519.html')

print(browser.find_element_by_css_selector('#price9').text)

browser.quit()

在上面的代码中,首先导入了selenium库,并创建了一个Chrome浏览器对象。然后使用get方法加载了一个股票信息的网页,在CSS选择器中查找了股票的价格信息,并打印出了结果。最后使用quit方法关闭了浏览器。

4. 爬取API

API是指一组预先定义好的接口,开发者可以通过调用API来获取数据。爬虫可以通过调用API来获取数据,常用的API有微信API、百度地图API等。

4.1 使用requests库调用API

在Python中,可以使用requests库来调用API获取数据。下面是一个使用百度地图API获取北京市天气的实例:

import requests

url = 'http://api.map.baidu.com/telematics/v3/weather?location=北京市&output=json&ak=你的AK'

response = requests.get(url)

data = response.json()

print(data['results'][0]['weather_data'][0]['weather'])

在上面的代码中,首先定义了一个API的URL地址,并使用requests库的get方法向服务器发送请求。然后将响应的JSON数据转换成Python的字典类型,并打印出了北京市今天的天气情况。

5. 利用爬虫分析数据

爬虫不仅可以获取数据,还可以对数据进行分析和处理。下面是一个使用爬虫获取全国高校排名并进行数据分析的实例:

5.1 爬取全国高校排名

import requests

import time

import json

def get_university_rank_data(year):

url = f'http://www.zuihaodaxue.cn/zuihaodaxuepaiming{year}.html'

response = requests.get(url)

response.encoding = 'utf-8'

html = response.text

soup = BeautifulSoup(html, 'lxml')

table = soup.find('table', {'class': 'tableList'})

trs = table.find_all('tr')

rank_data = []

for tr in trs:

tds = tr.find_all('td')

if len(tds) == 0:

continue

rank = int(tds[0].string)

name = tds[1].string

province = tds[2].string

score = float(tds[3].string)

rank_data.append({'rank': rank, 'name': name, 'province': province, 'score': score})

return rank_data

year = 2022

rank_data = get_university_rank_data(year)

with open(f'university_rank_{year}.json', 'w') as f:

json.dump(rank_data, f)

在上面的代码中,使用BeautifulSoup解析了全国高校排名网址的HTML代码,并将数据保存为JSON格式。

5.2 分析数据

import json

with open('university_rank_2022.json', 'r') as f:

rank_data = json.load(f)

# 计算总分数排名前十的学校

sorted_rank_data = sorted(rank_data, key=lambda x: x['score'], reverse=True)

top_ten = sorted_rank_data[:10]

for item in top_ten:

print(f"排名:{item['rank']} 学校名称:{item['name']} 分数:{item['score']}")

# 查找北京市的高校排名

bei_jing_universities = [x for x in rank_data if x['province'] == '北京']

sorted_bei_jing_rank_data = sorted(bei_jing_universities, key=lambda x: x['rank'])

for item in sorted_bei_jing_rank_data:

print(f"排名:{item['rank']} 学校名称:{item['name']} 分数:{item['score']}")

在上面的代码中,首先从JSON数据中读取全国高校排名数据。然后使用Python的排序方法,计算出总分数排名前十的学校,并打印出结果。接着从JSON数据中查找北京市的高校排名,并打印出结果。

6. 爬虫的限制与优化

爬虫需要遵守一定的规则,以防止影响服务器的正常运行。下面是一些常见的爬虫限制和优化方式:

6.1 robots.txt协议

robots.txt协议是指使用一个文本文件来告诉爬虫哪些页面可以爬取,哪些页面不能爬取。爬虫在访问网站之前需要先查看robots.txt协议文件,以遵守网站的规则。

6.2 爬虫速度控制

爬虫需要限制访问频率,以免对服务器造成过大的负担。可以使用time模块来控制爬虫访问的速度。

7. 总结

本文介绍了爬虫的基础知识、如何爬取静态网页、动态网页和API、如何使用爬虫分析数据,并简单介绍了爬虫的限制与优化。欢迎读者自行探索更多关于爬虫的知识。

后端开发标签