【问题标题】:Problem with For Loop in Python BeautifulSoup web scrapingPython BeautifulSoup 网页抓取中的 For 循环问题
【发布时间】:2021-01-07 02:35:29
【问题描述】:

我是 Python 初学者,正在尝试通过 BeautifulSoup 网页抓取项目学习。

我希望从this URL 中抓取记录项目标题、项目 URL 和购买日期并导出到 CSV。

我在抓取标题和 URL 方面取得了很大进展,但无法弄清楚如何在我的 for 循环中正确编码购买日期信息(下面的purchase_date 变量)。

当前发生的是 csv 文件中购买日期的数据(例如 p_date 标题)只显示没有文本的空白单元格。没有错误消息只是没有数据进入 csv。非常感谢任何指导。

谢谢!!


import requests
from requests import get
from bs4 import BeautifulSoup
import pandas as pd
import numpy as np

headers = {"Accept-Language": "en-US, en;q=0.5"}
url = "https://www.popsike.com/php/quicksearch.php?searchtext=metal+-signed+-promo+-beatles+-zeppelin+-acetate+-test+-sinatra&sortord=aprice&pagenum=1&incldescr=1&sprice=100&eprice=&endfrom=2020&endthru=2020&bidsfrom=&bidsthru=&layout=&flabel=&fcatno="
results = requests.get(url, headers=headers)
soup = BeautifulSoup(results.text, "html.parser")


title = []
date = []
URL = []

record_div = soup.find_all('div', class_='col-md-7 add-desc-box')


for container in record_div:

    description = container.a.text
    title.append(description)

    link = container.find('a')
    URL.append(link.get('href'))

    purchase_date = container.find('span',class_= 'info-row').text
    date.append(purchase_date)


test_data = pd.DataFrame({
'record_description': title,
'link': URL,
'p_date': date
})

test_data['link'] = test_data['link'].str.replace('../','https://www.popsike.com/',1)


print(test_data)

test_data.to_csv('popaaron.csv')

【问题讨论】:

  • 您的 test_data 有正确的值吗?在存储到 csv 之前尝试打印 test_data
  • 在写入 csv 之前使用数据帧是否有特殊原因?有更简单的替代方案可以完成工作。如果您愿意接受解决方案,请告诉我。
  • 诚实的答案是我是一个初学者,并且正在按照教程进行操作,所以我绝对愿意接受建议和替代解决方案。谢谢你,阿瑞斯!

标签: python pandas for-loop beautifulsoup


【解决方案1】:

我建议更改解析器类型:

soup = BeautifulSoup(results.text, "html5")

并修正购买日期的搜索表达式:

purchase_date = container.select('span.date > b')[0].text.strip(' \t\n\r')

【讨论】:

  • 哇,非常感谢!!我需要将其用作解析器类型:soup = BeautifulSoup(results.text, "html5lib") 然后效果很好,Alexandra。谢谢。
  • Alexandra 如果你不介意我问,“span.date > b”中的“>”是什么意思......这会搜索 b 容器标签中的所有内容吗?
  • ">" 用于选择特定父元素中的元素。它也被称为子组合选择器,即它只选择父级的直接子级。下面是一个例子的详细解释:stackoverflow.com/a/3225905/2792888
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-09-18
  • 1970-01-01
  • 2018-04-25
  • 2014-06-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多