【问题标题】:Trying to get BeautifulSoup to download some data. Getting no error, but nothing is downloaded试图让 BeautifulSoup 下载一些数据。没有错误,但没有下载任何内容
【发布时间】:2020-05-27 11:59:05
【问题描述】:

我只是尝试运行下面的代码。我没有收到错误消息,但实际上没有数据写入 CSV。我查看了网站,发现 snapshot-td2-cpsnapshot-td2 元素。当我删除 writer.writerow 语句并使用 print 语句时,我看到六个数字 2 字符,仅此而已。

import csv
import requests
from bs4 import BeautifulSoup

url_base = "https://finviz.com/quote.ashx?t="
tckr = ['SBUX','MSFT','AAPL']
url_list = [url_base + s for s in tckr]

with open('C:/Users/Excel/Desktop/today.csv', 'a', newline='') as f:
    writer = csv.writer(f)

    for url in url_list:
        try:
            fpage = requests.get(url)
            fsoup = BeautifulSoup(fpage.content, 'html.parser')

            # write header row
            writer.writerow(map(lambda e : e.text, fsoup.find_all('td', {'class':'snapshot-td2-cp'})))

            # write body row
            writer.writerow(map(lambda e : e.text, fsoup.find_all('td', {'class':'snapshot-td2'})))            
        except:
            print("{} - not found".format(url))

在 SBUX 示例中,我想从这个表中获取数据。

几个月前我测试了这段代码,一切正常。有人可以指出我的错误吗?我没有看到它。谢谢。

【问题讨论】:

  • 您在 fpage 上收到 403: Access Denied 响应。
  • 是的,我只是想通了。我不记得以前任何时候都必须登录该站点。所以,我想我需要 Selenium 来做这个?听起来对吗?
  • 是的 selenium 是自动浏览 @ASH 的路径

标签: python python-3.x beautifulsoup python-requests


【解决方案1】:

要获取数据,请在请求中指定 User-Agent

import csv
import requests
from bs4 import BeautifulSoup

url_base = "https://finviz.com/quote.ashx?t="
tckr = ['SBUX','MSFT','AAPL']
url_list = [(s, url_base + s) for s in tckr]

headers = {'User-Agent': 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:76.0) Gecko/20100101 Firefox/76.0'}

with open('data.csv', 'w') as f_out:
    writer = csv.writer(f_out, delimiter=',', quotechar='"', quoting=csv.QUOTE_MINIMAL)
    for t, url in url_list:
        print('Scrapping ticker {}...'.format(t))
        soup = BeautifulSoup(requests.get(url, headers=headers).content, 'html.parser')
        writer.writerow([t])
        for row in soup.select('.snapshot-table2 tr'):
            writer.writerow([td.text for td in row.select('td')])

打印:

Scrapping ticker SBUX...
Scrapping ticker MSFT...
Scrapping ticker AAPL...

并保存 data.csv(来自 LibreOffice 的屏幕截图):

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多