Для избыточности L oop повторяющиеся данные с 1 страницы - PullRequest
0 голосов
/ 06 марта 2020

Я пытался получить все данные с веб-сайта на каждой странице, поэтому я сделал все oop внутри всего oop. например, я сделал al oop для 4 страниц и получаю каждые 2 главных данных. но вместо того, чтобы получать по 2 данных на каждой странице, я получил избыточность на первой странице.

Код

from selenium import webdriver
from bs4 import BeautifulSoup
from selenium.webdriver.chrome.options import Options


url = 'http://example.com'
driver = webdriver.Chrome(executable_path="C:\\Files\\chromedriver_79_win.exe")
driver.get(url)

list_kode=[]

for i in range(4): # 4 pages 
    html_source = driver.page_source
    soup = BeautifulSoup(html_source, "html.parser") 
    for j in range(2): # 2 top item
        list_kode.append(soup.findAll("td", class_="sorting_1")[j].text)
    driver.find_element_by_xpath('//a[@data-dt-idx="9"]').click()
    # click to next page

list_kode

Вывод

['13784044',
 '13783044',
 '13784044',
 '13783044',
 '13572044',
 '13571044',
 '13355044',
 '13354044']

Если вы видите 1-й и 2-е данные совпадали с 3-м и 4-м данными, и я не могу перейти к данным 4-й страницы.

enter image description here

1 Ответ

0 голосов
/ 06 марта 2020

Я думаю, проблема в том, что скрипт работает слишком быстро. Это не ждет, пока следующая страница не отобразится достаточно быстро. Таким образом, вы должны поставить некоторую задержку там. Предпочтительный способ - использовать неявное ожидание селена, а не time.sleep(), но у меня не было времени на это разобраться.

Во-вторых, вы можете просто получить данные без селена (см. / Попробуйте второй скрипт ниже):

from selenium import webdriver
from bs4 import BeautifulSoup
from selenium.webdriver.chrome.options import Options
import time


url = 'http://lpse.polri.go.id/eproc4/lelang'
driver = webdriver.Chrome(executable_path="C:/chromedriver_win32/chromedriver.exe")
driver.get(url)

list_kode=[]

for i in range(4): # 4 pages 
    html_source = driver.page_source
    soup = BeautifulSoup(html_source, "html.parser") 
    for j in range(2): # 2 top item
        list_kode.append(soup.findAll("td", class_="sorting_1")[j].text)
    driver.find_element_by_xpath('//a[@data-dt-idx="9"]').click()
    time.sleep(5)
    # click to next page

driver.close()
print (list_kode)

Без селена:

import requests

url = 'http://lpse.polri.go.id/eproc4/lelang'
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36',
           'X-Requested-With': 'XMLHttpRequest'}

s = requests.session()
response = s.get(url, headers=headers)
cookie = s.cookies.get_dict()
cookieKey = list(cookie.keys())[0]
cookieVal = cookie[list(cookie.keys())[0]]
authToken = cookieVal.split('AT=')[-1].split('&')[0]
ts = cookieVal.split('TS=')[-1].split('&')[0]

url = 'http://lpse.polri.go.id/eproc4/dt/lelang'
 #'Cookie': list(cookie.keys())[0] + '=' + cookie[list(cookie.keys())[0]]}
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36',
           'X-Requested-With': 'XMLHttpRequest',
           'Cookie': cookieKey + '=' + cookieVal}

list_kode=[]

for i in range(4): # 4 pages 

    payload = {
    'draw': i,
    'columns[0][data]': '0',
    'columns[0][name]': '',
    'columns[0][searchable]': 'true',
    'columns[0][orderable]': 'true',
    'columns[0][search][value]': '',
    'columns[0][search][regex]': 'false',
    'columns[1][data]': '1',
    'columns[1][name]': '',
    'columns[1][searchable]': 'true',
    'columns[1][orderable]': 'true',
    'columns[1][search][value]': '',
    'columns[1][search][regex]': 'false',
    'columns[2][data]': '2',
    'columns[2][name]': '',
    'columns[2][searchable]': 'true',
    'columns[2][orderable]': 'true',
    'columns[2][search][value]': '',
    'columns[2][search][regex]': 'false',
    'columns[3][data]': '3',
    'columns[3][name]': '',
    'columns[3][searchable]': 'false',
    'columns[3][orderable]': 'false',
    'columns[3][search][value]': '',
    'columns[3][search][regex]': 'false',
    'columns[4][data]': '4',
    'columns[4][name]': '',
    'columns[4][searchable]': 'true',
    'columns[4][orderable]': 'true',
    'columns[4][search][value]': '',
    'columns[4][search][regex]': 'false',
    'order[0][column]': '0',
    'order[0][dir]': 'desc',
    'start': i*25,
    'length': '25',
    'search[value]': '',
    'search[regex]': 'false',
    'authenticityToken': authToken,
    '_': ts}


    jsonData = requests.get(url, headers=headers, params=payload).json()
    for j in range(2): # 2 top item
        list_kode.append(jsonData['data'][j][0])

print (list_kode)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...