在django使用美丽的汤刮网

问题描述 投票:-2回答:2

这段代码工作正常。但我想知道它是如何工作的。任何人都可以帮我解释这段代码吗?

scrapper.朋友

from bs4 import BeautifulSoup
import requests


def scrap(url="https://www.onlinekhabar.com/2018/12/724699"):
    try:
        res = requests.get(url)
        # print(res.text)
        # print(res.encoding)
        res.encoding = "utf-8"
        bs = BeautifulSoup(res.text, "html.parser")

        dict = {}
        dict["title"] = bs.select(".nws__title--card > h2")[0].text
        dict["published"] = bs.select(".post__time > span")[0].text
        dict["description"] = bs.select(".main__read--content")[0].text

        return dict
    except:
        return None

if __name__ == '__main__':
    print(scrap())
django web-scraping
2个回答
0
投票

XHR GET请求通过requests库发送到URL。响应对象html由BeautifulSoup.处理

CSS选择器语法用于从生成的BeautifulSoup对象中检索信息。

.nws__title--card是一个class selector。选择具有类属性nws__title--card的元素。然后>是一个child combinator,指定右边的h2标记元素必须是左边指定类的元素的子元素。 h2是type selector

如果在开发工具元素选项卡中输入该选择器,您将看到只有一个匹配项

enter image description here

所以,这一部分

select(".nws__title--card > h2")

根据传递给“”内部的select的选择器返回所有匹配元素的列表。然后

select(".nws__title--card > h2")[0]

选择第一个元素。在这种情况下,您只需使用仅返回一个匹配的方法替换它(然后不需要索引):

select_one(".nws__title--card > h2")

h2是标题标签。它正在从页面获取标题。然后将其作为title键的值对添加到字典中

dict["title"]

相同的逻辑适用于匹配并添加到字典中的其他项目。

如果过程成功则返回字典,如果失败则返回none


0
投票

request.get为你下载dom数据,漂亮的汤标记dom中与其键/标签对应的每个数据,并创建字典类的东西。因此,当你bs.select(“。nws__title - card> h2”)时,这意味着你正在使用标签.nws__title - card> h2提取数据,它返回一个数组。现在,您通过执行[0]并请求文本部分来选择数组中的第一个元素。这一切都是如此。有关更多详细信息,请阅读https://www.crummy.com/software/BeautifulSoup/bs4/doc/

© www.soinside.com 2019 - 2024. All rights reserved.