python3爬虫之入门基础和正则表达式

yizhihongxing

Python3 爬虫之入门基础和正则表达式

什么是爬虫?

爬虫,也称网络爬虫,是指一种自动获取网页内容的程序。爬虫通常会通过模拟人工浏览网页的行为,去抓取网页中的数据。

为什么要学习爬虫?

学习爬虫可以帮助我们:

  1. 更好地了解数据,掌握数据分析的技能;
  2. 在互联网中获取到自己需要的信息,并进行分析,以用于各种应用场景;
  3. 搜集市场上的报价、行情、新闻等信息,帮助决策。

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技术站

(0)
上一篇 2023年5月14日
下一篇 2023年5月14日

相关文章

  • Redis 如何实现分布式缓存?

    Redis 是一款高性能的内存数据库,支持多种数据结构和丰富的功能,其中分布式缓存是 Redis 的重要应用场景之一。Redis 如何实现分布式缓存呢?本文将为您详细讲解 Redis 分布式缓存的实现原理和使用攻略。 Redis 分布式缓存的实现原理 Redis 分布式缓存的实现原理主要包括以下几个方面: 数据分片:Redis 将缓存数据分成多个片段,每个片…

    python 2023年5月12日
    00
  • Python解析xml中dom元素的方法

    在Python中,可以使用xml.dom.minidom模块解析XML文件中的DOM元素。以下是Python解析XML中DOM元素的方法的详细攻略: 加载XML文件 要解析XML文件,需要先加载XML文件。以下是加载XML文件的示例: import xml.dom.minidom dom = xml.dom.minidom.parse(‘example.xm…

    python 2023年5月14日
    00
  • PyHacker编写URL批量采集器

    标准的markdown格式文本如下: PyHacker编写URL批量采集器 1. 准备工作 安装python3 安装PyCharm或其他编辑器 安装requests模块,可在命令行中使用以下命令进行安装 pip install requests 2. 编写代码 在PyCharm中新建一个Python文件,命名为”crawler.py”,输入以下代码: imp…

    python 2023年6月3日
    00
  • Python中的高级数据结构详解

    下面是详细讲解“Python中的高级数据结构详解”的完整攻略。 1. 什么是高级数据结构 高级数据结构指在基本数据结构的基础上,通过组合、继承、封装等方式形成的更加复杂、高级的数据结构。Python中有多种高级数据结构,例如堆、字典树、红黑树等。 2. Python中的高级数据结构 以下是Python中常用的几种高级数据结构。 2.1 堆 堆是一种特殊树形数…

    python 2023年5月14日
    00
  • python用户自定义异常的实例讲解

    下面是关于“Python用户自定义异常的实例讲解”的完整攻略。 什么是用户自定义异常? 在Python中,异常是一种在程序执行过程中出现的错误或意外情况。Python内置了许多异常类,例如IOError、TypeError,等等。当程序出现异常时,可以捕获并处理异常,避免程序异常终止。 除了使用内置的异常类外,Python还允许用户自定义异常类。通过定义自己…

    python 2023年5月13日
    00
  • Python里的dict和set的背后小秘密

    当我们在Python中使用dict(字典)和set(集合)这两种数据结构时,它们的背后其实有许多小秘密。在本文中,我们将简要地介绍这些秘密。 Python字典(dict)的小秘密 接受任意类型作为键名 Python的字典是一种哈希表,允许使用任意可哈希(hashable)的数据类型作为键名。哈希表使用键名的哈希值来快速定位键值对,因此键名必须是不可变的(im…

    python 2023年5月13日
    00
  • 详解python列表(list)的使用技巧及高级操作

    当然,我很乐意为您提供有关Python列表的详细信息。下面是一个完整攻略,其中包含有关Python列表的高级使用技巧和示例说明。 详解Python列表(list)的使用技巧及高级操作 Python列表是一种非常有用的数据类型,可以存储多个值,并且非常灵活。在本攻略中,我们将深入了解Python列表的高级使用技巧和操作。 列表推导式 列表推导式是一种简洁的语法…

    python 2023年5月13日
    00
  • Django 表单模型选择框如何使用分组

    使用Django表单中的选择框(select)时,有时候需要对选项进行分组,以便用户更方便地选择。本文将详细讲解如何在Django的表单中使用分组选择框。 1.创建分组选择框的选项 首先,需要创建选项和选项组。假设我们有一个产品表单,需要用户输入该产品所属的部门。在此示例中,我们创建两个有关部门的选项组:“技术部门”和“其他部门”。选项组中的每个选项都将属于…

    python 2023年6月3日
    00
合作推广
合作推广
分享本页
返回顶部