Loading [MathJax]/jax/input/TeX/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何利用BeatuifulSoup在多个页面中进行网页浏览

如何利用BeatuifulSoup在多个页面中进行网页浏览
EN

Stack Overflow用户
提问于 2019-08-13 12:11:59
回答 2查看 274关注 0票数 1

我试图在网上刮多个页面,并且我已经成功地检索到了一个页面的数据。现在,我想知道如何实现一些循环来从几个页面中检索数据。

到网页的链接是:category/dealers-distributors/

这是我的密码:

代码语言:javascript
运行
AI代码解释
复制
from bs4 import BeautifulSoup
import requests
import csv

source = requests.get('https://www.diac.ca/directory/wpbdp_category/dealers-distributors/').text

soup = BeautifulSoup(source, 'lxml')

csv_file = open('scrape.csv', 'w')

csv_writer = csv.writer(csv_file)
csv_writer.writerow(['company', 'website'])

for i in soup.find_all('div', class_='wpbdp-listing'):
    company = i.find('div', class_='listing-title').a.text
    print(company)

    website = i.find('div', class_='wpbdp-field-business_website_address').span.a.text
    print(website)

    csv_writer.writerow([company, website])

csv_file.close()

我非常感谢你的反馈和见解。非常感谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-08-13 12:30:14

一种可能是尝试使用class=next在标记下查找链接。如果存在链接,请使用该链接加载下一页。如果该链接不存在,则中断循环:

代码语言:javascript
运行
AI代码解释
复制
import requests
from bs4 import BeautifulSoup

source = requests.get('https://www.diac.ca/directory/wpbdp_category/dealers-distributors/').text

soup = BeautifulSoup(source, 'lxml')

page = 1
while True:
    print('Page no. {}'.format(page))
    print('-' * 80)
    for i in soup.find_all('div', class_='wpbdp-listing'):
        company = i.find('div', class_='listing-title').a.text
        print(company)

        website = i.find('div', class_='wpbdp-field-business_website_address').span.a.text
        print(website)

    if soup.select_one('.next a[href]'):
        soup = BeautifulSoup(requests.get(soup.select_one('.next a[href]')['href']).text, 'lxml')
        page += 1
    else:
        break

指纹:

代码语言:javascript
运行
AI代码解释
复制
Page no. 1
--------------------------------------------------------------------------------
AMD Medicom Inc.
http://www.medicom.ca
Clinical Research Dental Supplies & Services Inc.
http://www.clinicalresearchdental.com
Coltene Whaledent
http://www.coltene.com
CompuDent Systems Inc.
http://www.compudent.ca
DenPlus Inc.
http://www.denplus.com
Dental Canada Instrumentation
http://www.mydentalcanada.com
Dental Services Group of Toronto Inc.
http://www.dsgtoronto.com
Dental Wings Inc.
http://www.dentalwings.com
Dentsply Sirona Canada
http://www.dentsplysirona.ca
DiaDent Group International Inc.
http://www.diadent.com
Page no. 2
--------------------------------------------------------------------------------
DMG America LLC
http://www.dmg-america.com
Hager Worldwide, Inc.
http://www.hagerworldwide.com
Hansamed Ltd
http://www.hansamed.net
Henry Schein Canada
http://www.henryschein.com
Heraeus Kulzer LLC
http://www.heraeus-kulzer-us.com
Johnson & Johnson Inc.
http://www.jjnjcanada.com
K-Dental Inc.
http://www.k-dental.ca
Kerr Dental
http://www.kerrdental.com
Northern Surgical & Medical Supplies Ltd.
www.northernsurgical.com
Northern Surgical and Medical Supplies Ltd.
http://www.northernsurgical.com
Page no. 3
--------------------------------------------------------------------------------
Patterson Dental/Dentaire Canada Inc.
http://www.pattersondental.ca
Procter & Gamble Oral Health
http://www.pg.com
Qwerty Dental Inc.
http://www.qwertydental.com
Sable Industries Inc.
http://www.sableindustriesinc.com
Septodont of Canada, Inc.
http://www.septodont.ca
Sure Dental Supplies of Canada Inc.
http://www.suredental.com
Swiss NF Metals Inc.
http://www.swissnf.com
The Aurum Group
http://www.aurumgroup.com
The Surgical Room Inc.
http://www.thesurgicalroom.ca
Unique Dental Supply Inc.
http://www.uniquedentalsupply.com
票数 1
EN

Stack Overflow用户

发布于 2019-08-13 13:04:31

一般过程是这样的:

代码语言:javascript
运行
AI代码解释
复制
# Make soup

links = [link.get('href') for link in soup.find_all('a')]  #These are the links you want to visit next


for link in links:
    requests.get(link)
    # Do whatever / make soup again

对此也有帮助的是requests.Session(),它维护cookies / headers等。

代码语言:javascript
运行
AI代码解释
复制
session = requests.Session()

session.get(some_url)

下面是我刚才写的一个示例,它更多地涉及到显示抓取的一般流程:

代码语言:javascript
运行
AI代码解释
复制
def scrape_data(link):
    entries = soup.find_all('div', class_='data')
    return [entry.text for entry in entries]

def paginate(link):
     requests.get(link)
     links = soup.find_all('a', class_='nav')
     return [link.get('href') for link in links]

def main():
    data = [scrape_data(link) for link in paginate(starting_link)]
    # Export / process data here
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57484707

复制
相关文章
网页设计中如何利用配图进行视觉引导?
这次分享主要是总结网页设计中一些实用的配图技巧,让设计稿拥有更好的视觉引导,从而使大家快速解决工作中问题。
用户1730674
2019/06/17
1.1K0
网页设计中如何利用配图进行视觉引导?
在Python中如何使用BeautifulSoup进行页面解析
网络数据时代,各种网页数据扑面而来,网页中包含了丰富的信息,从文本到图像,从链接到表格,我们需要一种有效的方式来提取和解析这些数据。然而在处理网页数据时,我们常常面临着需要从页面中提取特定元素或者分析页面结构的问题。这些问题可能包括从网页中提取标题、链接、图片等内容,或者分析页面中的表格数据等。
小白学大数据
2023/09/12
7080
在MapReduce中利用MultipleOutputs输出多个文件
用户在使用Mapreduce时默认以part-*命名,MultipleOutputs可以将不同的键值对输出到用户自定义的不同的文件中。
星哥玩云
2022/07/03
2.3K0
在MapReduce中利用MultipleOutputs输出多个文件
django开发中利用 缓存文件 进行页面缓存
Cache-Control与Expires的作用一致,都是指明当前资源的有效期,控制浏览器是否直接从浏览器缓存取数据还是重新发请求到服务器取数据。只不过Cache-Control的选择更多,设置更细致,如果同时设置的话,其优先级高于Expires。
雷子
2021/03/15
1.2K0
django开发中利用 缓存文件 进行页面缓存
php中如何给页面进行加密
 💬个人网站:【芒果个人日志】​​​​​​  💬原文地址:如何在php中实现网站页面加密 - 芒果个人日志 (wyz-math.cn) 💂作者简介: THUNDER王,一名热爱财税和SAP ABAP编程以及热爱分享的博主。目前于江西师范大学会计学专业大二本科在读,同时任汉硕云(广东)科技有限公司ABAP开发顾问。在学习工作中,我通常使用偏后端的开发语言ABAP,SQL进行任务的完成,对SAP企业管理系统,SAP ABAP开发和数据库具有较深入的研究。 💅文章概要:无论是在网站设计中,还是个人博客的
THUNDER王
2023/02/23
9110
php中如何给页面进行加密
在 Hexo 页面中嵌入多个 geogebra 动态图
geogebra 动态图可以在网页中显示数学公式,本文记录显示多个geogebra的方法。 实现原理 需要在 hexo 中可以嵌入 geogebra 图像 在 script 语句中建立多个 GGBApplet 对象 在 window.onload 函数中调用多个函数 实现方法 引入 js 文件 本地文件 <script src="/vvd_js/deployggb.js"></script> //路径指向自己建立的js文件 官网文件 <script src="https://cdn.geogebr
为为为什么
2022/08/05
2.1K0
在 Hexo 页面中嵌入多个 geogebra 动态图
网页中多个盒子的设置
在网页排版时,通常会将网页分成几个部分,这就需要将网页分成一个个的盒子。探讨网页中多个盒子的设置。
算法与编程之美
2021/11/23
2.1K0
【XSS漏洞】利用XSS进行网页钓鱼
这里是你们微胖的小编Monster。 Whatever,让我们一起来看看今天的内容吧
一名白帽的成长史
2019/10/08
4.3K0
【XSS漏洞】利用XSS进行网页钓鱼
SpringMVC中利用@InitBinder来对页面数据进行解析绑定
在使用SpingMVC框架的项目中,经常会遇到页面某些数据类型是Date、Integer、Double等的数据要绑定到控制器的实体,或者控制器需要接受这些数据,如果这类数据类型不做处理的话将无法绑定。       这里我们可以使用注解@InitBinder来解决这些问题,这样SpingMVC在绑定表单之前,都会先注册这些编辑器。一般会将这些方法些在BaseController中,需要进行这类转换的控制器只需继承BaseController即可。其实Spring提供了很多的实现类,如CustomDateEd
猿人谷
2018/01/17
7640
利用CitrixReceiver浏览器进行渗透
Citrix Receiver是一种轻便的通用软件客户端,并带有类似浏览器的可扩展“插件”架构。Receiver标配有多种可选插件,可在Citrix Delivery Center产品系列,如:XenApp、XenDesktop、Citrix Access Gateway和Branch Repeater中与前端基础设施进行通信。这些插件支持的功能包括在线和离线应用、虚拟桌面交付、安全访问控制、密码管理、应用加速、多媒体加速、 服务级监测以及语音通信。
潇湘信安
2023/10/24
6050
利用CitrixReceiver浏览器进行渗透
如何优化前端页面 / 如何优化网页
HTML5学堂:如何优化前端页面 / 如何优化网页。作为前端开发人员来说,不但要开发出能兼容各大主流浏览器的页面,而且还需要懂得去优化前端页面。本文主要给大家讲解如何去优化页面。 1 前期准备 1.1 首页命名为index.html / index.htm / index.php等。 1.2 需要制作404页面。 1.3 文件夹结构合理。 1.4 命名使用英文且有语义性的单词,并提供参考文档。 2 结构 2.1 文件头部分 2.1.1 需要提供文档声明 2.1.2 设置utf-8的编码格式,并放置于titl
HTML5学堂
2018/03/12
2.6K0
如何利用 Playwright 对已打开的浏览器进行爬虫!
最近发现很多人都开始摒弃 Selenium,全面拥抱 Playwright 了,那如何利用 Playwright 进行爬虫,以应对一些反爬严格的网站呢?
AirPython
2023/08/22
2.4K0
如何利用 Playwright 对已打开的浏览器进行爬虫!
在Scrapy中如何利用CSS选择器从网页中采集目标数据——详细教程(上篇)
前几天给大家分享了Xpath语法的简易使用教程,没来得及上车的小伙伴可以戳这篇文章:在Scrapy中如何利用Xpath选择器从网页中采集目标数据——详细教程(上篇)、在Scrapy中如何利用Xpath选择器从网页中采集目标数据——详细教程(下篇)。今天小编给大家介绍Scrapy中另外一种选择器,即大家经常听说的CSS选择器。
Python进阶者
2020/11/03
3K0
在Scrapy中如何利用CSS选择器从网页中采集目标数据——详细教程(上篇)
在Scrapy中如何利用CSS选择器从网页中采集目标数据——详细教程(下篇)
前几天给大家分享了Xpath语法的简易使用教程,没来得及上车的小伙伴可以戳这篇文章:在Scrapy中如何利用Xpath选择器从网页中采集目标数据——详细教程(上篇)、在Scrapy中如何利用Xpath选择器从网页中采集目标数据——详细教程(下篇)、在Scrapy中如何利用CSS选择器从网页中采集目标数据——详细教程(上篇)。之前还给大家分享了在Scrapy中如何利用CSS选择器从网页中采集目标数据——详细教程(上篇),没来得及上车的小伙伴可以戳进去看看,今天继续上篇的内容往下进行。
Python进阶者
2020/11/03
2.7K0
在Scrapy中如何利用CSS选择器从网页中采集目标数据——详细教程(下篇)
利用Citrix Receiver浏览器进行渗透
Citrix Receiver 是一种轻便的通用软件客户端,并带有类似浏览器的可扩展“插件”架构。Receiver 标 配 有 多 种 可 选 插 件 , 可 在 Citrix Delivery Center 产 品 系 列 ( 如 :XenApp 、 XenDesktop 、 Citrix Access Gateway 和 Branch Repeater)中与前端基础设施进行通信。这些插件支持的功能包括在 线和离线应用、虚拟桌面交付、安全访问控制、密码管理、应用加速、多媒体加速、 服务级监测以及语音 通信。
安全小王子
2020/07/31
1.9K0
利用Citrix Receiver浏览器进行渗透
兼利通分析如何利用python进行网页代码分析和提取
以小组为单元进行实验,每小组5人,小组自协商选一位组长,由组长安排和分配实验任务,具体参加实验内容中实验过程。
用户7633552
2020/08/07
1.4K0
兼利通分析如何利用python进行网页代码分析和提取
如何用Web3.jsAPI在页面中进行转账
本文介绍如何使用Web3.js API 在页面中进行转账,是我翻译的文档Web3.js 0.2x 中文版 及 区块链全栈-以太坊DAPP开发实战 中Demo的文章说明。
Tiny熊
2018/10/18
1.7K0
如何用Web3.jsAPI在页面中进行转账
浏览器如何完成网页渲染?
image.png 渲染流程 (1)把HTML代码形成文档对象模型DOM (2)加载并解析样式文件,形成CSS对象模型 (3)在DOM和CSS对象模型基础上,把可见元素组织成一棵渲染树,树上的每一个渲染对象都是对应的DOM对象及其计算过的样式,渲染树就是一个DOM的直观展现,这个过程可以理解为定义每个对象的样子 (4)对渲染树上的每个对象计算坐标,这个过程可以理解为定义每个对象的位置 (5)渲染树上的元素最终展示在浏览器里,这一过程称为“painting” 重绘 Repaint 当改变那些不会影响元素在网页
dys
2018/04/02
1.3K0
浏览器如何完成网页渲染?
浅谈如何在项目中处理页面中的多个网络请求
在开发中很多时候会有这样的场景,同一个界面有多个请求,而且要在这几个请求都成功返回的时候再去进行下一操作,对于这种场景,如何来设计请求操作呢?今天我们就来讨论一下有哪几种方案。
s_在路上
2018/09/11
3.7K0
浅谈如何在项目中处理页面中的多个网络请求
点击加载更多

相似问题

利用JSoup浏览网页

12

如何利用BeautifulSoup浏览网页中的每一页

12

如何使用DOMparser在div中进行网页浏览

12

使用BeautifulSoup解析BeatuifulSoup,但却被困在创建BeatuifulSoup对象中

12

如何利用ResizeObserver进行多个行为

11
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档