python爬虫常用requests和beautifulSoup这2个第三方模块。需要先进行手动安装。

requests负责下载页面数据,beautifulSoup负责解析页面标签。

关于beautifulSoup的api使用,详见api页面:https://beautifulsoup.readthedocs.io/zh-cn/v4.4.0/#find-all

豆瓣评论中邮箱数据爬取案例:

import re #正则表达式
import requests #下载网页
import bs4# beautifulSoup,解析网页 headers1={
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7',
'Accept-Language': 'zh-CN,zh;q=0.9',
'Cache-Control': 'max-age=0',
'Connection': 'keep-alive',
'Host': 'www.douban.com',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36'
} mail_list=[] #list存储邮箱结果
#因为豆瓣有反爬取机制,因此requests需要添加headers来模拟浏览器,否则requests抓取不到页面
response = requests.get('https://www.douban.com/group/topic/102346598/?_i=5308140i1GN13-',headers=headers1)
#print(response.text) #页面文本按lxml格式进行解析
page_obj = bs4.BeautifulSoup(response.text,"lxml")
reply_divs=page_obj.find_all("div",attrs={"class":"reply-doc"})#找到所有的评论div
#print(len(reply_divs)) if reply_divs:
for div in reply_divs:#遍历div,对评论数据进行解析
reply_div=div.find_next("p",attrs={"class":"reply-content"})
mail_re=re.search("\w+@\w+.\w+",reply_div.text,flags=re.A)#用正则表达式匹配邮箱,#flags=re.A的作用是排除2侧的中文
if mail_re:#如果这个评论中有邮箱,则继续查找他的时间
times=div.find_next("span",attrs={"class":"pubtime"})
mail_list.append([mail_re.group(),times.text]) print(mail_list)
print(len(mail_list))

在豆瓣评论中有分页的情况,如果要分页评论数据都抓取要改造如下:

import re #正则表达式
import requests #下载网页
import bs4# beautifulSoup,解析网页 headers1={
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7',
'Accept-Language': 'zh-CN,zh;q=0.9',
'Cache-Control': 'max-age=0',
'Connection': 'keep-alive',
'Host': 'www.douban.com',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36'
} def download_page(url1):
#先抓取第一页数据
print(f"下载分页{url1}")
response = requests.get(url1, headers=headers1)
page_obj = bs4.BeautifulSoup(response.text, "lxml")
bs4_page_obj_list = [page_obj] #把第一页数据存储下来 # 把所有的分页下载下来后,然后统一去提取emails
url_set = set() # 存下所有的分页的url
paginator_ele = page_obj.find("div", attrs={"class": "paginator"})
for a_ele in paginator_ele.find_all("a"):
url_set.add(a_ele.attrs.get("href")) for url in url_set:#变量其他分页(除了第一页)
print(f"下载分页{url}")
page_obj = requests.get(url, headers=headers1)
bs4_page_obj = bs4.BeautifulSoup(page_obj.text, "lxml")
bs4_page_obj_list.append(bs4_page_obj) # 先暂存 return bs4_page_obj_list def fetch_emails(page_obj_list):
mail_list=[]
for bs4_obj in page_obj_list:# 循环每个页面
reply_divs = bs4_obj.find_all("div",attrs={"class":"reply-doc"})
for div in reply_divs:
reply_div = div.find("p",attrs={"class":"reply-content"})
mail_re = re.search("\w+@\w+\w+",reply_div.text,flags=re.A)
if mail_re:
pub_time = div.find("span",attrs={'class':"pubtime"})
print(pub_time.text,mail_re.group())
mail_list.append([mail_re.group(),pub_time.text]) print(f'总共有邮箱数量是:{len(mail_list)}') all_bs4_page_list = download_page("https://www.douban.com/group/topic/102346598/?_i=5308140i1GN13-")
fetch_emails(all_bs4_page_list)

python教程8-页面爬虫的更多相关文章

  1. Python 自用代码(scrapy多级页面(三级页面)爬虫)

    2017-03-28 入职接到的第一个小任务,scrapy多级页面爬虫,从来没写过爬虫,也没学过scrapy,甚至连xpath都没用过,最后用了将近一周才搞定.肯定有很多low爆的地方,希望大家可以给 ...

  2. python利用beautifulsoup多页面爬虫

    利用了beautifulsoup进行爬虫,解析网址分页面爬虫并存入文本文档: 结果: 源码: from bs4 import BeautifulSoup from urllib.request imp ...

  3. Python初学者之网络爬虫(二)

    声明:本文内容和涉及到的代码仅限于个人学习,任何人不得作为商业用途.转载请附上此文章地址 本篇文章Python初学者之网络爬虫的继续,最新代码已提交到https://github.com/octans ...

  4. 洗礼灵魂,修炼python(69)--爬虫篇—番外篇之feedparser模块

    feedparser模块 1.简介 feedparser是一个Python的Feed解析库,可以处理RSS ,CDF,Atom .使用它我们可从任何 RSS 或 Atom 订阅源得到标题.链接和文章的 ...

  5. 洗礼灵魂,修炼python(50)--爬虫篇—基础认识

    爬虫 1.什么是爬虫 爬虫就是昆虫一类的其中一个爬行物种,擅长爬行. 哈哈,开玩笑,在编程里,爬虫其实全名叫网络爬虫,网络爬虫,又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者 ...

  6. python接口自动化28-requests-html爬虫框架

    前言 requests库的好,只有用过的人才知道,最近这个库的作者又出了一个好用的爬虫框架requests-html.之前解析html页面用过了lxml和bs4, requests-html集成了一些 ...

  7. 使用Python + Selenium打造浏览器爬虫

    Selenium 是一款强大的基于浏览器的开源自动化测试工具,最初由 Jason Huggins 于 2004 年在 ThoughtWorks 发起,它提供了一套简单易用的 API,模拟浏览器的各种操 ...

  8. Python 利用Python编写简单网络爬虫实例3

    利用Python编写简单网络爬虫实例3 by:授客 QQ:1033553122 实验环境 python版本:3.3.5(2.7下报错 实验目的 获取目标网站“http://bbs.51testing. ...

  9. Python 利用Python编写简单网络爬虫实例2

    利用Python编写简单网络爬虫实例2 by:授客 QQ:1033553122 实验环境 python版本:3.3.5(2.7下报错 实验目的 获取目标网站“http://www.51testing. ...

  10. 简明Python教程自学笔记——命令行通讯录

    [前言]学习Python已经有一段时间了,相关的书籍资料也下载了不少,但是没有一本完整的看完,也没有编出一个完整的程序.今天下午比较清闲就把<简明Python教程>看了一遍,然后根据书里面 ...

随机推荐

  1. 利用 🤗 Optimum Intel 和 fastRAG 在 CPU 上优化文本嵌入

    嵌入模型在很多场合都有广泛应用,如检索.重排.聚类以及分类.近年来,研究界在嵌入模型领域取得了很大的进展,这些进展大大提高了基于语义的应用的竞争力.BGE.GTE 以及 E5 等模型在 MTEB 基准 ...

  2. C++ 异常和错误处理机制:如何使您的程序更加稳定和可靠

    在C++编程中,异常处理和错误处理机制是非常重要的.它们可以帮助程序员有效地处理运行时错误和异常情况.本文将介绍C++中的异常处理和错误处理机制. 什么是异常处理? 异常处理是指在程序执行过程中发生异 ...

  3. java switch 自定义表格的渲染和编辑示例

    目录 正常使用表格 自定义表格样式 正常使用表格 很简单,使用一次就知道了,不过多介绍. // 创建 JTable 实例,使用默认的模型 JTable table = new JTable(); // ...

  4. openGauss基于4路鲲鹏服务器的性能调优

    1.概述 本文主要描述了在4路鲲鹏服务器上,通过软硬件协同优化配置达到openGauss数据库的极致性能的方法. 主要包括软硬件要求.BIOS配置.网卡配置.磁盘配置.服务器参数设置.数据库参数配置. ...

  5. HarmonyOS应用性能与功耗云测试

    性能测试 性能测试主要验证HarmonyOS应用在华为真机设备上运行的性能问题,包括启动时长.界面显示.CPU占用和内存占用.具体性能测试项的详细说明请参考性能测试标准. 性能测试支持Phone和TV ...

  6. HarmonyOS 电话服务开发指导

    电话服务开发概述 HarmonyOS 电话服务系统提供了一系列的 API 用于拨打电话.获取无线蜂窝网络和 SIM 卡相关信息. 应用可以通过调用 API 来获取当前注册网络名称.网络服务状态.信号强 ...

  7. HarmonyOS实现静态与动态数据可视化图表

    一. 样例介绍 本篇Codelab基于switch组件和chart组件,实现线形图.占比图.柱状图,并通过switch切换chart组件数据的动静态显示.要求实现以下功能: 1.  实现静态数据可视化 ...

  8. mysql 悲观锁和乐观锁(二)

    前言 简单介绍一下,在mysql 优化系列中会重新介绍,仅仅是留个印象. 悲观锁和乐观锁其实都是概念性问题. 正文 悲观锁: 悲观锁,正如其名,具有强烈的独占和排他特性. 它指的是对数据被外界(包括本 ...

  9. sweetviz工具避坑和简单使用

    网上关于sweetviz的文章比较少,有些坑这里说一下给大家避坑. 使用sweetviz遇到的错误如下: KeyError: "None of ['index'] are in the co ...

  10. C++ 递归与面向对象编程基础

    C++ 递归 递归是一种使函数调用自身的技术.这种技术提供了一种将复杂问题分解为简单问题的方法,从而更容易解决问题. 递归可能有点难以理解.理解其工作原理的最佳方法是通过实验来尝试. 递归示例 将两个 ...