Python3 爬虫之入门基础和正则表达式
什么是爬虫?
爬虫,也称网络爬虫,是指一种自动获取网页内容的程序。爬虫通常会通过模拟人工浏览网页的行为,去抓取网页中的数据。
为什么要学习爬虫?
学习爬虫可以帮助我们:
- 更好地了解数据,掌握数据分析的技能;
- 在互联网中获取到自己需要的信息,并进行分析,以用于各种应用场景;
- 搜集市场上的报价、行情、新闻等信息,帮助决策。
Python3 爬虫基础
Python3 可以使用 urllib、requests、beautifulsoup 等模块进行爬虫。
Urllib
Urllib 是 Python 内置的 HTTP 请求库,包含了对 HTTP 的一些基本操作,如发送 GET、POST 等请求,以及管理 Cookie、请求头信息等。
以下是一个简单的示例,使用 urllib 请求一个网页:
import urllib.request
response = urllib.request.urlopen('http://www.baidu.com')
print(response.read().decode('utf-8'))
这个示例中,我们使用 urllib.request.urlopen 函数打开一个网页,并将其返回结果保存到变量 response 中,然后使用 response.read() 函数读取网页的内容,并使用 decode() 函数进行编码转换。
Requests
Requests 是一个简单易用的 HTTP 请求库,在 Python 爬虫中被广泛使用。
以下是一个简单的示例,使用 requests 请求一个网页:
import requests
response = requests.get('http://www.baidu.com')
print(response.text)
这个示例中,我们使用 requests.get 函数请求一个网页,并将其结果保存到变量 response 中,然后使用 response.text 属性获取网页的内容。
BeautifulSoup
BeautifulSoup 是 Python 爬虫中用于解析 HTML 和 XML 文档的 Python 库,它可以从网页中提取需要的数据。与使用正则表达式从网页中提取数据相比,使用 BeautifulSoup 更加灵活简洁。
以下是一个简单示例,使用 BeautifulSoup 解析一个网页:
import requests
from bs4 import BeautifulSoup
response = requests.get('http://www.baidu.com')
soup = BeautifulSoup(response.text, 'html.parser')
print(soup.title.string)
这个示例中,我们先使用 requests.get 函数请求一个网页,然后使用 BeautifulSoup 解析这个页面,并从中获取网页的标题。
正则表达式基础
正则表达式是一种匹配字符串的描述性语言,它可以用来描述字符串的规则,以及根据规则进行查找和筛选。
基本语法
正则表达式的基本语法包括以下几个元字符:
.
:匹配任意一个字符;[]
:匹配括号内任意一个字符;*
:匹配前一个字符任意次;+
:匹配前一个字符至少一次;?
:匹配前一个字符零次或一次;|
:匹配左右两边的任意一项;()
:匹配括号内的表达式。
以下是一个简单的示例,使用正则表达式匹配某个字符串:
import re
text = 'Hello, World!'
pattern = 'l.{2}o'
match = re.search(pattern, text)
print(match.group())
这个示例中,我们使用 re.search 函数在一个字符串中查找一个正则表达式,并输出匹配到的结果。
常用正则表达式
正则表达式中,有一些常用的模式可以帮助我们更快地匹配字符串。例如:
\d
:匹配任意一个数字;\D
:匹配任意一个非数字字符;\w
:匹配任意一个字母、数字或下划线;\W
:匹配任意一个非字母、数字或下划线。
以下是一个示例,使用正则表达式匹配中国大陆手机号:
import re
text = '我的手机号码是:13912345678,你呢?'
pattern = '1[3456789]\d{9}'
match = re.search(pattern, text)
print(match.group())
这个示例中,我们使用正则表达式匹配一个中国大陆手机号,并输出匹配到的结果。
示例一:爬取豆瓣电影 TOP250
以下是一个示例,演示如何使用 Python 爬虫爬取豆瓣电影 TOP250 并提取其中的电影名称、评分和评价人数:
import requests
from bs4 import BeautifulSoup
import csv
csv_file = open('movies.csv', 'w', newline='', encoding='utf-8')
writer = csv.writer(csv_file)
writer.writerow(['电影名称', '评分', '评价人数'])
url = 'https://movie.douban.com/top250'
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'}
for i in range(10):
response = requests.get(url, headers=headers, params={'start': i * 25})
soup = BeautifulSoup(response.text, 'html.parser')
movies = soup.select('.grid_view .item')
for movie in movies:
name = movie.select_one('.title').get_text().strip()
rating = movie.select_one('.rating_num').get_text().strip()
number = movie.select('.star span')[-1].get_text().strip().strip('人评价')
print(name, rating, number)
writer.writerow([name, rating, number])
csv_file.close()
这个示例中,我们首先打开一个 CSV 文件,并写入标题行。然后循环获取豆瓣电影 TOP250 的网页,使用 BeautifulSoup 解析网页,并提取出每个电影的名称、评分和评价人数。最后将这些信息写入 CSV 文件中。
示例二:爬取糗事百科热门段子
以下是一个示例,演示如何使用 Python 爬虫爬取糗事百科热门段子并提取其中的作者、点赞数和评论数:
import requests
from bs4 import BeautifulSoup
import csv
csv_file = open('jokes.csv', 'w', newline='', encoding='utf-8')
writer = csv.writer(csv_file)
writer.writerow(['作者', '点赞数', '评论数'])
url = 'https://www.qiushibaike.com/hot/page/'
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'}
for i in range(1, 11):
response = requests.get(url + str(i), headers=headers)
soup = BeautifulSoup(response.text, 'html.parser')
articles = soup.select('.content-block')
for article in articles:
author = article.select_one('.recmd-name').get_text().strip()
vote = article.select_one('.stats-vote .number').get_text().strip()
comment = article.select_one('.stats-comments .number').get_text().strip()
print(author, vote, comment)
writer.writerow([author, vote, comment])
csv_file.close()
这个示例中,我们首先打开一个 CSV 文件,并写入标题行。然后循环获取糗事百科热门段子的网页,使用 BeautifulSoup 解析网页,并提取出每个段子的作者、点赞数和评论数。最后将这些信息写入 CSV 文件中。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python3爬虫之入门基础和正则表达式 - Python技术站