【问题标题】:BS4 ebay scraper prints text including html codeBS4 ebay scraper 打印包含 html 代码的文本
【发布时间】:2021-10-20 05:42:31
【问题描述】:

所以我正在尝试根据一些俄罗斯人在 youtube 上的视频运行 BS4 ebay 刮板。我对这种编写刮板的方式很陌生,到目前为止我只使用过 selenium,但想尝试一些新的更快的东西,可以在服务器上部署一次,这样我就可以获取我刮到手机中的数据,例如当我不在家。我的目标是从我解析的 h3 对象中打印出文本,但输出会打印出以下内容:("Samsung NP9004D 900X Intel i5-3317U / 4GB RAM / 13,3 Zoll3 >") 而不是这个 (Samsung NP9004D 900X Intel i5-3317U / 4GB RAM / 13,3 Zoll) 谁能解释我做错了什么?非常感谢! PS:如果有人知道创建 ebay 特定刮板的更好方法,将不胜感激!比如自动化东西或创建自定义 API...

import requests
from bs4 import BeautifulSoup


def get_page(url):
    response = requests.get(url)

    if not response.ok:
        print("Server responded:", response.status_code)
    else:
        soup = BeautifulSoup(response.text, "lxml")
    return soup


def get_detail_data(soup):
    listing = soup.find("div", {"class": "s-item__wrapper clearfix"})
    name = soup.find_all("h3", {"class": "s-item__title"}, text=True)
    print(name)






def main():
    url = "https://www.ebay.de/b/Laptops-Notebooks/175672/bn_1618754?LH_ItemCondition=7000&mag=1&rt=nc&_sop=1"
    get_page(url)
    get_detail_data(get_page(url))


if __name__ == "__main__": 
    main()

【问题讨论】:

  • 所以你无法获取name ??
  • 哦,帖子自己重新编辑了,抱歉

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


【解决方案1】:

试试这个:

def get_detail_data(soup):
    listing = soup.find("div", {"class": "s-item__wrapper clearfix"})
    names = soup.find_all("h3", {"class": "s-item__title"})
    for name in names:
        if chr(9650) in str(name):
            print(name.text.strip().replace(chr(9650), ''))
        else:
            print(name.text.strip())

【讨论】:

  • 是的,这也是一个很好的答案,而且打印出来的效果更好一些。谢谢伙计,我会尽力做到这一点,以便我可以将多个数据收集到 xlsx! :D 一些结果前面有空格,但可以通过在 print(name.text."strip()") 末尾添加 .strip() 来解决问题
  • 我还注意到有时会有“三角形”(ascii 代码 9650),我修改了代码以删除空格和“三角形”
  • 是的,它就像一个魅力!我从你的回答中得到启发,也替换了“Neues Angebot”,所以它更好。我将努力获取更多数据并让它们发挥出色。然后可能是模型识别脚本,因此如果产品规格缺失,它会根据模型打印出产品规格并制作:D。可能有点野心……
【解决方案2】:

find_all 返回基于类的元素列表,您必须对其进行循环提取文本,以便可以使用 .get_text().text 方法

data=soup.find_all("h3", class_="s-item__title")
products=[i.get_text(strip=True) for i in data]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-21
    • 1970-01-01
    • 2014-06-22
    • 1970-01-01
    • 1970-01-01
    • 2021-06-06
    • 2021-05-12
    相关资源
    最近更新 更多