Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何利用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

复制
相关文章
C语言 | 输出平均成绩最高学生的信息
例41:有n个结构体变量,内含学生的学号,学号,和三门成绩。要求输出平均成绩最高学生的信息(包括学号、姓名、三门课程成绩和平均成绩)
小林C语言
2020/12/22
2.2K0
C语言 | 输出平均成绩最高学生的信息
「SQL面试题库」 No_106 查找成绩处于中游的学生
题目介绍: 查找成绩处于中游的学生 find-the-quiet-students-in-all-exams
不吃西红柿
2023/10/16
1900
LeetCode MySQL 1412. 查找成绩处于中游的学生
成绩处于中游的学生是指至少参加了一次测验, 且得分既不是最高分也不是最低分的学生。
Michael阿明
2021/02/19
5060
sql练习学生成绩查询实践
1.2 查询存在” 01 “课程但可能不存在” 02 “课程的情况(不存在时显示为 null ) (使用左外连接时,保留左侧多余数据)
全栈程序员站长
2022/09/01
1.6K0
100人成绩的平均
本文最后更新于 1170 天前,其中的信息可能已经有所发展或是发生改变。 #include "stdafx.h" #include<cstdio> using namespace std; int main() { int i, sum=0,s[100]; for (i = 0; i < 100; i++) { int k = i + 1; printf("请输入第%d位同学的成绩\n",k); scanf("%d", &s[i]); sum = sum + s[i]; } su
Yuyy
2022/06/28
3010
【Python】实现输出成绩最高或最低分的学生姓名以及低于平均分的学生姓名
scores = {"小刘": 45, "小红": 68, "小米": 96, "小白": 65, "小梦": 75} highest = max(scores.values()) lowest = min(scores.values()) average = sum(scores.values()) / len(scores) # print("平均值为:"+str(average)) max_keys = [k for k, x in scores.items() if not any(y > x
用户7718188
2021/10/31
2.2K0
求一个班学生的数学平均成绩、最高分、最低分
/* 功能:求一个班学生的数学平均成绩、最高分、最低分 日期:2013-05-08 */
WindCoder
2018/09/20
5780
C循环-求平均成绩
The greatest pleasure in life is doing what people say you cannot do.
小Bob来啦
2020/12/15
4.1K0
C循环-求平均成绩
HDOJ 2023 求平均成绩
Problem Description 假设一个班有n(n<=50)个学生,每人考m(m<=5)门课,求每个学生的平均成绩和每门课的平均成绩,并输出各科成绩均大于等于平均成绩的学生数量。
谙忆
2021/01/20
4740
【每日SQL打卡】​​​​​​​​​​​​​​​DAY 13丨每位学生的最高成绩【难度中等】
编写一个 SQL 查询,查询每位学生获得的最高成绩和它所对应的科目,若科目成绩并列,取 course_id 最小的一门。查询结果需按 student_id 增序进行排序。
不吃西红柿
2022/07/29
2040
java中sql如何嵌套查找_SQL 查询嵌套使用[通俗易懂]
id int primary key auto_increment, — 主键id
全栈程序员站长
2022/09/22
4.7K0
java中sql如何嵌套查找_SQL 查询嵌套使用[通俗易懂]
学生成绩管理系统[通俗易懂]
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/115232.html原文链接:https://javaforall.cn
全栈程序员站长
2022/07/11
1.6K0
试题 算法提高 统计平均成绩
  有4个学生,上4门课,要求输入全部学生的各门课成绩,并分别求出每门课的平均成绩。(保留2位小数)   括号里是解释内容,不用输入输出。输入的所有数都为0到100之间(包括端点)的整数
SingYi
2022/07/13
2590
「SQL面试题库」 No_61 每位学生的最高成绩
题目介绍: 每位学生的最高成绩 highest-grade-for-each-student
不吃西红柿
2023/05/11
3830
测试工程师sql笔试题-学生成绩管理
测试人员工作在工作中会用到SQL来辅助测试,求职时也常常会在笔试环节遇到各种各样的sql设计题目,张老师整理了一些工作中常用的sql知识点,希望对大家有所帮助。
张树臣
2018/09/29
6540
sql语句面试经典50题_sql基础知识面试题
========================================================
全栈程序员站长
2022/08/03
3K0
sql语句面试经典50题_sql基础知识面试题
面试 SQL整理 常见的SQL面试题:经典50题
========================================================
全栈程序员站长
2022/08/31
2.4K0
问与答88: 如何获取成绩排在最后5名的学生姓名?
Q:我有一个学生成绩表,如何使用公式获取成绩排在最后5名的学生姓名,如下图1所示。
fanjy
2020/10/09
2.1K0
问与答88: 如何获取成绩排在最后5名的学生姓名?
学生成绩统计c语言
}; void print(struct sturec *p); void format(struct sturec lei[N]); int research(struct sturec *p4,char id[8]); void input(struct sturec *p1); int main(){
凡尘扰凡心
2023/02/14
1.4K0
点击加载更多

相似问题

SQL选择学生平均成绩

12

SQL根据成绩查找学生姓名

228

如何计算学生的平均成绩

14

如何使用HashMap计算学生的平均成绩?

40

根据成绩和平均成绩对学生进行排名

12
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

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

洞察 腾讯核心技术

剖析业界实践案例

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