此代码运行正常。但是我想知道它是如何工作的。 谁能帮我解释一下这段代码?
scrapper.py
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())
答案 0 :(得分:1)
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
。
答案 1 :(得分:0)
request.get为您下载dom数据,并为美丽的汤标签下载与dom的键/标签相对应的dom中的每个数据,并创建事物字典。因此,当您 bs.select(“。nws__title--card> h2”)时,表示您正在提取标签为 .nws__title--card> h2 的数据,该数据将返回数组。现在,您通过执行 [0] 并请求文本部分来选择数组中的第一个元素。这就是全部的工作方式。有关更多详细信息,请阅读https://www.crummy.com/software/BeautifulSoup/bs4/doc/。