这段代码工作正常。但我想知道它是如何工作的。任何人都可以帮我解释这段代码吗?
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())
XHR GET请求通过requests
库发送到URL。响应对象html由BeautifulSoup.
处理
CSS选择器语法用于从生成的BeautifulSoup
对象中检索信息。
.nws__title--card
是一个class selector。选择具有类属性nws__title--card
的元素。然后>
是一个child combinator,指定右边的h2
标记元素必须是左边指定类的元素的子元素。 h2是type selector。
如果在开发工具元素选项卡中输入该选择器,您将看到只有一个匹配项
所以,这一部分
select(".nws__title--card > h2")
根据传递给“”内部的select
的选择器返回所有匹配元素的列表。然后
select(".nws__title--card > h2")[0]
选择第一个元素。在这种情况下,您只需使用仅返回一个匹配的方法替换它(然后不需要索引):
select_one(".nws__title--card > h2")
h2是标题标签。它正在从页面获取标题。然后将其作为title
键的值对添加到字典中
dict["title"]
相同的逻辑适用于匹配并添加到字典中的其他项目。
如果过程成功则返回字典,如果失败则返回none
。
request.get为你下载dom数据,漂亮的汤标记dom中与其键/标签对应的每个数据,并创建字典类的东西。因此,当你bs.select(“。nws__title - card> h2”)时,这意味着你正在使用标签.nws__title - card> h2提取数据,它返回一个数组。现在,您通过执行[0]并请求文本部分来选择数组中的第一个元素。这一切都是如此。有关更多详细信息,请阅读https://www.crummy.com/software/BeautifulSoup/bs4/doc/。