Как очистить от сети всех детей одного атрибута с одного класса? - PullRequest
2 голосов
/ 27 сентября 2019

Я пытался получить выделенную область (на скриншоте) на сайте, используя BeautifulSoup4, но не могу получить то, что хочу.Возможно, у вас есть рекомендация сделать это другим способом.

Снимок экрана веб-сайта, на котором мне нужно получить данные

from bs4 import BeautifulSoup
import requests
import pprint
import re
import pyperclip
import urllib
import csv
import html5lib

urls = ['https://e-mehkeme.gov.az/Public/Cases?page=1',
        'https://e-mehkeme.gov.az/Public/Cases?page=2'
        ]

# scrape elements
for url in urls:
    response = requests.get(url)
    soup = BeautifulSoup(response.content, "html.parser")
    content = soup.findAll("input", class_="casedetail filled")
    print(content)

Мой ожидаемый результат выглядит следующим образом:

Ətraflı məlumat: 

İşə baxan hakim və ya tərkib 
Xəyalə Cəmilova - sədrlik edən hakim
İlham Kərimli - tərkib üzvü
İsmayıl Xəlilov - tərkib üzvü

Tərəflər 
Cavabdeh: MAHMUDOV MAQSUD SOLTAN OĞLU
Cavabdeh: MAHMUDOV MAHMUD SOLTAN OĞLU
İddiaçı: QƏHRƏMANOVA AYNA NUĞAY QIZI

İşin mahiyyəti
Mənzil mübahisələri - Mənzildən çıxarılma

Ответы [ 2 ]

2 голосов
/ 27 сентября 2019

Используя базовый URL, сначала получите все caseid, а затем передайте эти caseid целевому URL, а затем получите значение первого тега td.

import requests
from bs4 import BeautifulSoup
urls = ['https://e-mehkeme.gov.az/Public/Cases?page=1',
        'https://e-mehkeme.gov.az/Public/Cases?page=2'
        ]

target_url="https://e-mehkeme.gov.az/Public/CaseDetail?caseId={}"

for url in urls:
    response = requests.get(url)
    soup = BeautifulSoup(response.content, "html.parser")

    for caseid in soup.select('input.casedetail'):
        #print(caseid['value'])
        soup1=BeautifulSoup(requests.get(target_url.format(caseid['value'])).content,'html.parser')
        print(soup1.select_one("td").text)
1 голос
/ 27 сентября 2019

Я бы написал так.Извлечение идентификатора, который необходимо ввести в запрос GET для получения подробной информации

import requests
from bs4 import BeautifulSoup as bs

urls = ['https://e-mehkeme.gov.az/Public/Cases?page=1','https://e-mehkeme.gov.az/Public/Cases?page=2']

def get_soup(url):
    r = s.get(url)
    soup = bs(r.content, 'lxml')
    return soup

with requests.Session() as s:
    for url in urls:
        soup = get_soup(url)
        detail_urls = [f'https://e-mehkeme.gov.az/Public/CaseDetail?caseId={i["value"]}' for i in soup.select('.caseId')]

        for next_url in detail_urls:
            soup = get_soup(next_url)
            data = [string for string in soup.select_one('[colspan="4"]').stripped_strings]
            print(data)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...