BS4 Scraper производит html всего кода div, а не только ссылку href - PullRequest
1 голос
/ 23 апреля 2020

Код для сайта здесь: https://i.imgur.com/uIJO20R.png

Код, который я использую:

import requests
import time
from bs4 import BeautifulSoup
import sys

sys.stdout = open("links.txt", "a")

for x in range(0, 2):
    try:
        URL = f'https://link.com/{x}'
        page = requests.get(URL)

        soup = BeautifulSoup(page.content, 'html.parser')

        rows = soup.find_all('div', id='view')
        for row in rows:
            print(row.text)
        time.sleep(5)
    except:
        continue

Я просто хочу вывод списка ссылки, как показано в выделенном коде. Но вместо этого это приводит ко всему коду представления, а не только к HREF, что я и хочу.

Пример вывода, который он производит:

<div id="view">
<a href="/watch/8f310ba6dfsdfsdfsdf" target="_blank"><img src="/thumbs/jpg/8f310ba6dfsdfsdfsdf.jpg" width="300"/></a>
...
...

Когда то, что я хочу, чтобы это произвело это:

/watch/8f310ba6dfsdfsdfsdf
...
...

Ответы [ 3 ]

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

Используйте следующий код, который найдет все теги привязки в теге div, а затем получит значение href.

soup = BeautifulSoup(page.content, 'html.parser')
for links in soup.find('div',id='view').find_all('a'):
    print(links['href'])

Если вы Bs4 4.7.1 или выше Вы можете использовать следующий css селектор.

soup = BeautifulSoup(page.content, 'html.parser')
for links in soup.select('#view>a'):
    print(links['href'])
0 голосов
/ 23 апреля 2020

Вы извлекаете все содержимое тега div, поэтому, если вы хотите получить ссылки внутри div, вам нужно добавить тег a в селектор css следующим образом:

links = soup.select('div[id="view"] a')
for link in links :
    print(link.get('href'))
0 голосов
/ 23 апреля 2020

Извлекая атрибут href a внутри div, вы можете получить желаемый результат

rows = soup.find_all('div', id='view')
for row in rows:
    links = row.find_all('a')
    for link in links:
        print(link['href'])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...