Получение данных только со страницы, которая открыта в браузере

#python #session #web-scraping #beautifulsoup

#python #сессия #очистка веб-страниц #прекрасный суп #beautifulsoup

Вопрос:

` В теле первого веб-запроса: eprocTenders:tenderNumber: eprocTenders:tenderCategory: -1 eprocTenders:tenderTitle: eprocTenders:tenderDescription: eprocTenders:ecvRange: -1 eprocTenders:DepartmentID: eprocTenders:status: EVALUATION_COMPLETED eprocTenders:departmentLoc: eprocTenders:tenderCreateDateFrom: 01/04/2019 eprocTenders: Дата создания тендера: 31/03/2020 eprocTenders: Дата отправки тендера из: eprocTenders:Дата отправки тендера: eprocTenders: selectTender: SEARCHTENDERS eprocTenders:butSearch: Поиск eprocTenders_SUBMIT: 1 jsf_sequence: 2 eprocTenders:dataScrollerId: eprocTenders:link_hidden:

Тело второго запроса :

eprocTenders: Номер тендера: eprocTenders:Категория тендера: -1 eprocTenders: Заголовок тендера: eprocTenders:Описание тендера: eprocTenders: Общий диапазон: -1 eprocTenders:DepartmentID: eprocTenders:статус: EVALUATION_COMPLETED eprocTenders:departmentLoc: eprocTenders:tenderCreateDateFrom: 01/04/2019 eprocTenders: Дата создания тендера: 31/03/2020 eprocTenders:Дата отправки тендера от: eprocTenders:Дата отправки тендера от: eprocTenders:Дата отправки тендера от: eprocTenders: selectTender: ПОИСКОВЫЕ ЗАПРОСЫ eprocTenders_SUBMIT: 1 jsf_sequence: 3 eprocTenders:dataScrollerId: idx2 eprocTenders:link_hidden: eprocTenders:dataScrollerIdidx2 `

Я пытаюсь очистить данные с этого веб-сайта: URL

Это код, который я пытаюсь:

 import requests
import time
from bs4 import BeautifulSoup
import pandas as pd

mydata = 'https://eproc.karnataka.gov.in/eprocurement/common/eproc_tenders_list.seam'

with requests.Session() as session:
   

     session.headers = {'Cookie':'JSESSIONID=DEBFA1809C30CE2F3F04D0044DFCA784.appp1vm22','Content-Type':'multipart/form-data; boundary=----WebKitFormBoundaryYxNGT6chlbwn3Ots','Content-Disposition': 'form-data', "User-Agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36"}

   
    mydata_Text = []

    response = session.post(mydata , data=data ,verify =False)
    soup = BeautifulSoup(response.content, 'html.parser')
    for x in range(1,5):
        data = {
      
       
        'eprocTenders:status': 'EVALUATION_COMPLETED',
        'eprocTenders:tenderCreateDateFrom': '01/04/2019',
        'eprocTenders:tenderCreateDateTo': '31/03/2020',
        'eprocTenders:butSearch' : 'Search',
        'eprocTenders_SUBMIT': 1,
        'eprocTenders:dataScrollerId':'idx' str(x),
     #         'eprocTenders:_link_hidden_: eprocTenders':'dataScrollerIdidx' str(x),
        'jsf_sequence': str(x),
        'eprocTenders:selectTender': 'SEARCHTENDERS',
     
        }
        print(data)
        time.sleep(5)
        mycontent = soup.find('table', attrs={'id':'eprocTenders:browserTableEprocTenders'})
        table_body = mycontent.find('tbody')
        rows = table_body.find_all('tr')
        for row in rows:
            cols = row.find_all('td')
            cols = [me.text.strip() for me in cols]
            mydata_Text.append([me for me in cols if me])
            print(len(mydata_Text))
  

Чего мне здесь не хватает?

Комментарии:

1. Вам нужно объяснить, в чем проблема с вашим кодом

2. проблема в том, что я получаю только данные первой страницы, но mycode работает идеально, и я вижу, что страница продолжается

3. вы получаете только первую страницу, потому что после этого вы никогда не делаете другого запроса. Вы продолжаете создавать объект soup из того же начального response.content

Ответ №1:

вы получаете только первую страницу, потому что после этого вы никогда не делаете другого запроса. Вы продолжаете создавать объект soup из того же исходного response.content. Вам понадобится запрос и синтаксический анализ внутри цикла. попробуйте что-то вроде:

 import requests
import time
from bs4 import BeautifulSoup
import pandas as pd

mydata = 'https://eproc.karnataka.gov.in/eprocurement/common/eproc_tenders_list.seam'

with requests.Session() as session:
   

     session.headers = {'Cookie':'JSESSIONID=DEBFA1809C30CE2F3F04D0044DFCA784.appp1vm22','Content-Type':'multipart/form-data; boundary=----WebKitFormBoundaryYxNGT6chlbwn3Ots','Content-Disposition': 'form-data', "User-Agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36"}

   
    mydata_Text = []

    #response = session.post(mydata , data=data ,verify =False) #<--- Put inside the loop
    #soup = BeautifulSoup(response.content, 'html.parser') #<--- Put inside the loop
    for x in range(1,5):
        data = {
      
       
        'eprocTenders:status': 'EVALUATION_COMPLETED',
        'eprocTenders:tenderCreateDateFrom': '01/04/2019',
        'eprocTenders:tenderCreateDateTo': '31/03/2020',
        'eprocTenders:butSearch' : 'Search',
        'eprocTenders_SUBMIT': 1,
        'eprocTenders:dataScrollerId':'idx' str(x),
     #         'eprocTenders:_link_hidden_: eprocTenders':'dataScrollerIdidx' str(x),
        'jsf_sequence': str(x),
        'eprocTenders:selectTender': 'SEARCHTENDERS',
     
        }
        print(data)
        response = session.post(mydata , data=data ,verify =False) #< --- HERE
        soup = BeautifulSoup(response.content, 'html.parser') #<--- HERE

        time.sleep(5)
        mycontent = soup.find('table', attrs={'id':'eprocTenders:browserTableEprocTenders'})
        table_body = mycontent.find('tbody')
        rows = table_body.find_all('tr')
        for row in rows:
            cols = row.find_all('td')
            cols = [me.text.strip() for me in cols]
            mydata_Text.append([me for me in cols if me])
            print(len(mydata_Text))
  

Комментарии:

1. Это дает мне тот же результат, повторяющий тот же результат страницы в моем фрейме данных размером 80?? я не понимаю, в чем проблема? Пожалуйста, взгляните еще раз — заранее спасибо

2. chitown88 — Я пробовал это, но это дает тот же результат?

3. какой параметр возвращает следующую страницу. Это то, что вам нужно будет повторить. К сожалению, я не могу протестировать, потому что сайт недоступен для просмотра..

4. data = { ‘eprocTenders:status’: ‘EVALUATION_COMPLETED’, ‘eprocTenders:tenderCreateDateFrom’: ’01/04/2019′, ‘eprocTenders:tenderCreateDateTo’: ’31/03/2020′, ‘eprocTenders:butSearch’: ‘Поиск’, ‘eprocTenders_SUBMIT’: 1, ‘eprocTenders: dataScrollerId’:’idx’ str(x), # ‘eprocTenders:_link_hidden_: eprocTenders’:’dataScrollerIdidx’ str(x), ‘jsf_sequence’: str(x), ‘eprocTenders:selectTender’: ‘SEARCHTENDERS’, } в этой части есть ‘eprocTenders:dataScrollerId’:’idx’ str(x),

5. Я не думаю, что это проблема с beautifulsoup. Я полагаю, это как-то связано с тем, что возвращается в запросе.