Веб-слом с красивым супом несколько дубликатов - PullRequest
0 голосов
/ 20 апреля 2020

Это мой первый анализ веб-страниц, и я следую этому учебнику . Я использую этот веб-сайт для сбора информации. Я пытаюсь взять текст, который гласит: «89426 Green Mountain Road, Astoria, OR 97103. Телефон: 503-325-9720». Я заметил, что у меня есть несколько тегов ul и li в моем теге div class_=alert. Поэтому я не уверен, как получить конкретный c. Вот что я пробовал, но продолжаю получать другой текст из другой группы ul / li.

from bs4 import BeautifulSoup
import requests

source = requests.get('https://www.pickyourownchristmastree.org/ORxmasnw.php').text

soup = BeautifulSoup(source, 'lxml')

noble_ridge = soup.find('div', class_='alert')
information = noble_ridge.ul.li.text
print(information)
# print(soup.prettify())


C:\Users\name\anaconda3\envs\Scraping\python.exe C:/Users/name/PycharmProjects/Scraping/Christmas_tree_farms.py
If the name of the farm is blue with an underline; that's a link to their website. Click on it for the most current hours and information.

Process finished with exit code 0

Ответы [ 2 ]

2 голосов
/ 20 апреля 2020

noble_ridge содержит множество тегов ul .

Использование

noble_ridge.ul

переводит вас на первый найденный тег ul . См. Изображение ниже -

enter image description here

И ваш ожидаемый текст - "89426 Green Mountain Road, Astoria, OR 97103. Телефон: 503-325 -9720 " находится под следующим тегом ul.

Следовательно, если вы хотите sh напрямую пройти туда, вы можете использовать -

noble_ridge.findAll('ul')[1].li.text

Или вы можете l oop через все теги и ищите ваш текст как -

source = requests.get('https://www.pickyourownchristmastree.org/ORxmasnw.php').text

soup = BeautifulSoup(source, 'lxml')

noble_ridge = soup.find('div', class_='alert')

ultags =  noble_ridge.findAll('ul')

temp = '89426 Green Mountain Road, Astoria, OR 97103. Phone: 503-325-9720'

for tag in ultags:
    litags =  tag.findAll('li')
    #print(litags)
    for li in litags:
        tx = li.getText()
        #print(tx)
        if tx.find(temp)>-1:

            print(tag)

Это даст вам тег ul , в котором есть текст.

2 голосов
/ 20 апреля 2020
import requests
from bs4 import BeautifulSoup


def main(url):
    r = requests.get(url)
    soup = BeautifulSoup(r.content, 'html.parser')
    target = soup.select_one("span.farm")
    goal = list(target.next_elements)[5].rsplit(" ", 2)[0]
    print(goal)


main("https://www.pickyourownchristmastree.org/ORxmasnw.php")

Выход:

89426 Green Mountain Road, Astoria, OR 97103. Phone: 503-325-9720.

Использование re:

import requests
import re


def main(url):
    r = requests.get(url)
    match = [item.group(1) for item in re.finditer(r'>(\d.+\d{4})\.', r.text)]
    print(match[0])


main("https://www.pickyourownchristmastree.org/ORxmasnw.php")

Выход:

89426 Green Mountain Road, Astoria, OR 97103. Phone: 503-325-9720
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...