Immortal463 2023-03-10 19:36 采纳率: 37.5%
浏览 24

python爬取数据时发现没有按照顺序而且没法翻页

以下是代码


 
from selenium import webdriver
from selenium.webdriver import ActionChains
from selenium.webdriver.common.by import By
from lxml import etree
from time import sleep
import pandas as pd
from bs4 import BeautifulSoup
 
 
def get_row(li):
    list1 = []
    l1_1 = li.find_all('a')
    l1_2 = li.find_all('td')
    for x in l1_1:
        list1.append(x.string)
    for y in l1_2[2:5]:
        list1.append(y.string)
    return list1
 
 
# 实例化一个浏览器对象
wd = webdriver.Chrome(executable_path='./chromedriver')
# 让浏览器发起一个指定url的请求
wd.get('http://www.fortunechina.com/fortune500/c/2022-08/03/content_415683.htm')
# 设置隐式等待时间
wd.implicitly_wait(20)
# 获取浏览器当前界面的动态页面源码数据
page_text = wd.page_source
# 解析企业名称
soup = BeautifulSoup(page_text, "html.parser")
 
# 建立空列表
list_ji = []
 
max_page = 2
 
### 检测测数据是否加载完成
def data_exsist():
    if soup.find_all('tr',role="row") :
        global list_ji
        l1 =soup.find_all('tr',role="row")
        for j in range(0,50) :
            list_ji.append(get_row(l1[j]))
    else:
        sleep(10)
        if soup.find_all('tr', role="row"):
            l1 = soup.find_all('tr', role="row")
            for j in range(0, 50, 1):
                list_ji.append(get_row(l1[j]))
        else:
            wd.refresh()
            sleep(5)
            data_exsist()
 
### 主程序
def get_all_data() :
    global wd,list_ji    ###声明全局变量
    for i in range(1,int(max_page)+1) :
        if i != int(max_page)-1 :
            data_exsist()
            print(f'当前第{i}页')
            wd.find_element(By.LINK_TEXT, '下页').click()
        else :
            l1 = soup.find_all('tr', role="row")
            for line in (0,50) :
                try :
                    list_ji.append(get_row(l1[line]))
                except Exception :
                    break
                    ###报错就说明所有数据都拿完了,直接退出即可
 
get_all_data()
column = ["企业名称", "营业收入", "利润", "国家"]
result = pd.DataFrame(list_ji, columns=column)
pd.set_option('display.max_rows', None)  # 显示pandas所有行
print(result)
wd.quit()

出现了这样的问题

img


最后让排名第五十的放在了前面,而且发现有一些空数据,还不能翻页。

  • 写回答

2条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-03-10 22:52
    关注
    评论

报告相同问题?

问题事件

  • 创建了问题 3月10日

悬赏问题

  • ¥15 phython如何实现以下功能?查找同一用户名的消费金额合并—
  • ¥15 孟德尔随机化怎样画共定位分析图
  • ¥18 模拟电路问题解答有偿速度
  • ¥15 CST仿真别人的模型结果仿真结果S参数完全不对
  • ¥15 误删注册表文件致win10无法开启
  • ¥15 请问在阿里云服务器中怎么利用数据库制作网站
  • ¥60 ESP32怎么烧录自启动程序,怎么查看客户esp32板子上程序及烧录地址
  • ¥50 html2canvas超出滚动条不显示
  • ¥15 java业务性能问题求解(sql,业务设计相关)
  • ¥15 52810 尾椎c三个a 写蓝牙地址