Уведомления

Группа в Telegram: @pythonsu

#1 Июль 31, 2019 09:34:22

Fedor_Bober
От: Екатеринбург
Зарегистрирован: 2019-06-07
Сообщения: 40
Репутация: +  0  -
Профиль   Отправить e-mail  

BeautifulSoup поиск нужных данных

Всех приветствую.
Есть задача выудить из переменной, в которой хранится:

 <a class="cryptoSignLink linkPopUp pWidth_840" href="/bla/bla/bla/vla/list.html?Number=12345678">
</a>

12345678 - вот эти цифры мне и нужны.
Не понял как до них добраться через find и find_all.

Офлайн

#2 Июль 31, 2019 09:39:33

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

BeautifulSoup поиск нужных данных

Сначала вам нужно как-то добраться до конкретного <a>. Если вы знаете, как это сделать, то дальше вы просто получаете href для конкретного тега и парсите его питоном, например методом строки split.



Офлайн

#3 Июль 31, 2019 10:45:38

Fedor_Bober
От: Екатеринбург
Зарегистрирован: 2019-06-07
Сообщения: 40
Репутация: +  0  -
Профиль   Отправить e-mail  

BeautifulSoup поиск нужных данных

FishHook
Сначала вам нужно как-то добраться до конкретного <a>.
 <a class="cryptoSignLink linkPopUp pWidth_840" href="/bla/bla/bla/vla/list.html?Number=12345678"></a>

Считаю что добрался. Но как выдернуть не понял.

не получается - тупик!

Отредактировано Fedor_Bober (Июль 31, 2019 11:46:42)

Офлайн

#4 Июль 31, 2019 13:20:37

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

BeautifulSoup поиск нужных данных

 from bs4 import BeautifulSoup as bs
html = """
<html>
<body>
<a class="cryptoSignLink linkPopUp pWidth_840" href="/bla/bla/bla/vla/list.html?Number=12345678"></a>
</body>
</html>
"""
soup = bs(html, "lxml")
print soup.a["href"].split("=")[-1]



Офлайн

#5 Июль 31, 2019 14:23:36

Fedor_Bober
От: Екатеринбург
Зарегистрирован: 2019-06-07
Сообщения: 40
Репутация: +  0  -
Профиль   Отправить e-mail  

BeautifulSoup поиск нужных данных

 regNumber = int(temp_regNumber.split('list.html?regNumber=')[-1].split('">\n</a>')[0])

Офлайн

#6 Авг. 1, 2019 12:36:10

Fedor_Bober
От: Екатеринбург
Зарегистрирован: 2019-06-07
Сообщения: 40
Репутация: +  0  -
Профиль   Отправить e-mail  

BeautifulSoup поиск нужных данных

Не могу описать почему вылезает одна проблема, поэтому выложу свой код сюда.
Да! Код новичка. Без изысков.

При выполнении <class ‘list’> имеет два элемента. В связи с этим вопрос. Как побороть это? В какую сторону кода смотреть?

 import requests
from bs4 import BeautifulSoup
import time
import csv
def get_html(url):
    headers = {'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36'}
    r = requests.get(url, headers = headers)
    return r.text
def get_total_pages(html):
    soup = BeautifulSoup(html, 'lxml')
    #pages = soup.find('ul', class_ = 'pages').find_all('li', class_ = 'page')[-1].get('href')
    pages = soup.find('ul', class_ = 'pages').find_all('span', class_ = 'link-text')
    total_pages = len(pages)
    #print(total_pages)
    return(total_pages)
def get_page_data(html):
    soup = BeautifulSoup(html, 'lxml')    
    ads = soup.find('div', class_ = 'parametrs margBtm10').find_all('a', class_ = 'cryptoSignLink linkPopUp pWidth_840')
    regNumbers = []
    csv_file = open(r'zakupki.csv', 'a')
    
    
    for ad in ads:        
        regNumber = str(ad).split('list.html?regNumber=')[-1].split('">\n</a>')[0]
        regNumbers.append(str(regNumber))          
    links = []    
    for i in regNumbers:        
        base_url = 'http://zakupki.gov.ru/epz/order/notice/printForm/view.html?regNumber='        
        url_gen = base_url + str(i)
        links.append(url_gen)
        csv_file.write(url_gen + ';' + '\n')
    csv_file.close()
    #print(links)
    print(type(links))
    print(len(links))
    
    
def main():
    url = 'http://zakupki.gov.ru/epz/order/quicksearch/search.html?searchString=%D0%B4%D0%B5%D0%B7%D0%B8%D0%BD%D1%84%D0%B5%D0%BA%D1%86%D0%B8%D1%8F&morphology=on&pageNumber=1&sortDirection=false&recordsPerPage=_10&showLotsInfoHidden=false&fz44=on&fz223=on&af=on&currencyId=-1&region_regions_5277383=region_regions_5277383&regions=5277383&regionDeleted=false&sortBy=UPDATE_DATE'
    base_url = 'http://zakupki.gov.ru/epz/order/quicksearch/search.html?searchString=дезинфекция&morphology=on&'
    page_part = "pageNumber="
    query_part = "&sortDirection=false&recordsPerPage=_10&showLotsInfoHidden=false&fz44=on&fz223=on&af=on&currencyId=-1&region_regions_5277383=region_regions_5277383&regions=5277383&regionDeleted=false&sortBy=UPDATE_DATE"
    total_pages = get_total_pages(get_html(url))
    for i in range(1, total_pages+1):        
        url_gen = base_url + page_part + str(i) + query_part
        html = get_html(url_gen)
        get_page_data(html)
        
if __name__ == '__main__':
    main()

Офлайн

#7 Авг. 1, 2019 12:39:10

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

BeautifulSoup поиск нужных данных

Fedor_Bober
поэтому выложу свой код сюда.
не нужен ваш код. Дайте пример HTML (минимальный!!!), скажите что хотите получить.



Офлайн

#8 Авг. 1, 2019 12:50:01

Fedor_Bober
От: Екатеринбург
Зарегистрирован: 2019-06-07
Сообщения: 40
Репутация: +  0  -
Профиль   Отправить e-mail  

BeautifulSoup поиск нужных данных

FishHook
Дайте пример HTML (минимальный!!!), скажите что хотите получить.
В смысле ссылку на страницу?

Офлайн

#9 Авг. 1, 2019 12:52:44

Fedor_Bober
От: Екатеринбург
Зарегистрирован: 2019-06-07
Сообщения: 40
Репутация: +  0  -
Профиль   Отправить e-mail  

BeautifulSoup поиск нужных данных

Хочу получить с сайта закупок ссылки на страницу(ы):
http://zakupki.gov.ru/223/purchase/public/notification/print-form/show.html?noticeId=8414178

http://zakupki.gov.ru/epz/order/quicksearch/search.html?searchString=%D0%B4%D0%B5%D0%B7%D0%B8%D0%BD%D1%84%D0%B5%D0%BA%D1%86%D0%B8%D1%8F&morphology=on&pageNumber=1&sortDirection=false&recordsPerPage=_10&showLotsInfoHidden=false&fz44=on&fz223=on&af=on&currencyId=-1&region_regions_5277383=region_regions_5277383&regions=5277383&regionDeleted=false&sortBy=UPDATE_DATE - с этой страницы собираю количество страниц и ID аукционов. И толкаю их в list.

Отредактировано Fedor_Bober (Авг. 1, 2019 12:53:07)

Офлайн

#10 Авг. 1, 2019 13:59:56

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

BeautifulSoup поиск нужных данных

Fedor_Bober
В смысле ссылку на страницу?
нет, в смысле строку, содержащую HTML. Зачем мне ваша страница, чего я там не видел?
Вы же задаете конкретный впрос “При выполнении <class ‘list’> имеет два элемента.” Вероятно у вас какие-то проблемы как раз тогда, когда класс имеет два элеиента.

Fedor_Bober
Хочу получить с сайта закупок ссылки на страницу(ы):
Да наздоровье. Мне всё равно, хоть вы весь амазон желайте распарсить.
Fedor_Bober
- с этой страницы собираю количество страниц и ID аукционов. И толкаю их в list.
Молодец, информация ценная. Но как она нас приближает к классу, имеющему два элемента и вашим трудностям, с ним связанным?



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version