соскоб с помощью красивого супа в Джанго - PullRequest
0 голосов
/ 07 апреля 2019

Этот код работает нормально.Но я хочу знать, как это работает.Может кто-нибудь помочь мне объяснить этот код ??

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())

Ответы [ 2 ]

0 голосов
/ 07 апреля 2019

Запрос XHR GET отправляется на URL через библиотеку requests. Html объекта ответа обрабатывается BeautifulSoup.

Синтаксис селектора CSS используется для извлечения информации из сгенерированного объекта BeautifulSoup.

.nws__title--card является селектором класса . Выбирает для элементов с атрибутом класса nws__title--card. Тогда > является дочерним комбинатором , указывающим, что элементы тега h2 справа должны быть дочерними элементами для класса с классом, указанным слева. H2 - селектор типа .

Если вы введете этот селектор на вкладке элементов инструментов разработчика, вы увидите, что есть только одно совпадение

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 голосов
/ 07 апреля 2019

request.get загружает для вас данные dom, а красивые супы помечают все данные в dom, соответствующие их ключу / тегу, и создают словарь.Поэтому, когда вы bs.select (". Nws__title-card> h2") , это означает, что вы извлекаете данные с тегом .nws__title-card> h2 , который возвращает массив.Теперь вы выбираете первый элемент в массиве, выполнив [0] и запросив текстовую часть.Вот как все это работает.Для более подробной информации читайте https://www.crummy.com/software/BeautifulSoup/bs4/doc/.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...