【问题标题】:Dynamic way to iterate using pagination, Python, Pandas and BeautifulSoup使用分页、Python、Pandas 和 BeautifulSoup 进行迭代的动态方式
【发布时间】:2022-01-17 13:59:34
【问题描述】:

感谢贡献者,他的代码高效且运行良好。有两个缺点,分别是:1)Tail_Number字段 没有准确捕捉。例如第一页 ma​​nuf/Boeing_Vertol.html Tail_Number 记录应为 01001。在第三页 /manuf/Boeing_Vertol:3.html 这些Tail_Number* 记录“5-4006”、“5-4054”、“5-4083”不应被捕获为类似日期的“May-4006”、“May-4054”、“May- 4083” 。 2) 如果可能的话,我想遍历 https://www.airport-data.com/manuf/09.htmlhttps://www.airport-data.com/manuf/Z.html 并将每个 Aircraft by Manufacturer 转储到其自己的 .csv 文件中

import requests
import pandas as pd
from bs4 import BeautifulSoup as bs
from urllib.request import Request

headers =   {
        'accept':'*/*',
        'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36',
        }

url = 'https://www.airport-data.com/manuf/Boeing_Vertol.html'
r = requests.get(url, headers=headers)

data = []

while True:
    print(url)
    html = requests.get(url)
    soup = bs(html.text, 'html.parser')
    data.append(pd.read_html(soup.select_one('table').prettify())[0])

    if soup.select_one('li.active + li a[href]'):
        url = soup.select_one('li.active + li a')['href']
    else:
        break
df = pd.concat(data)
df.to_csv("Boeing_Vertol.csv",encoding='utf-8-sig',index=False)

【问题讨论】:

标签: python pandas csv web-scraping beautifulsoup


【解决方案1】:

注意: *一次应该只有一个问题 - 答案集中在您的第一个问题上。

为避免将值转换为日期,您可以将 parse_dates=False 设置为 pandas.read_html()

data.append(pd.read_html(soup.select_one('table').prettify(), parse_dates=False)[0])

【讨论】:

  • 我尝试了上述修改的代码。输出 .csv 文件产生这些错误的 Tail_Number “1001”而不是“01001”和 Tail_Number “May-4006”而不是“05-4006”
  • 不确定在库版本或系统方面应该以何种方式存在依赖关系 - 即使没有通过 windows 上的 jupyter 进行自定义也运行代码,工作正常,否则我不会有发布原始解决方案。你的设置是什么样的?
  • 我在 macOS Monterey 上运行 Sublime Text 版本 3.2.2 - Pandas 1.3.4 - BeautifulSoup4 4.10.0 - Python 3.8.12。好的,这很有趣,我尝试了 Jupiter 并同意你的观点,它可以工作。下载文件时,csv.file 中包含的结果会发生更改,并包含前面提到的错误,如发布的那样。不知何故,木星下载造成了问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-12-09
  • 1970-01-01
  • 2022-12-01
  • 2019-01-29
  • 2018-05-22
  • 2016-01-06
  • 2020-08-09
相关资源
最近更新 更多