#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. Я полагаю, это как-то связано с тем, что возвращается в запросе.