Очистить веб-страницу <ul><li> (Python) - PullRequest
0 голосов
/ 29 декабря 2018

Вопрос:

Существует веб-сайт https://au.pcpartpicker.com/products/cpu/overall-list/#page=1 со списком <li> под <ul>, каждый элемент в списке содержит <div> с классом title в этом классе есть еще 2 <div> элемента, у первого есть текстовый пример 3,4 ГГц 6-Core (Pinnacle Ridge) я хочу удалить весь текст, не заключенный в скобки, чтобы получить PinnacleRidge .После того, как список очищен, я хочу перейти на следующую страницу, изменив # page = .

Код:

Я не уверен, что есть только фрагменты, новот оно:

из request_html import HTMLSession session = HTMLSession ()

r = session.get('https://au.pcpartpicker.com/product/cpu/overall-list/#page=' + page)

table = r.html.find('.ul')

//not sure find each <li> get first <div>

junk, name = div.split('(')

name.replace("(", "")

name.replace(")", "")

Ожидаемый результат:

Я хочу просмотреть каждую страницу, пока не останется ни одной находкикаждый список и получая имя, его не нужно сохранять, так как у меня есть код для его сохранения при создании.

Если вам нужна дополнительная информация, пожалуйста, дайте мне знать

Спасибо

1 Ответ

0 голосов
/ 29 декабря 2018

Сайт динамический, поэтому вам придется использовать selenium для получения желаемых результатов:

from bs4 import BeautifulSoup as soup
from selenium import webdriver
import time, re
d = webdriver.Chrome('/path/to/chromdriver')
d.get('https://au.pcpartpicker.com/products/cpu/overall-list/#page=1')
def cpus(_source):
  result = soup(_source, 'html.parser').find('ul', {'id':'category_content'}).find_all('li')
  _titles = list(filter(None, [(lambda x:'' if x is None else x.text)(i.find('div', {'class':'title'})) for i in result]))
  data = [list(filter(None, [re.findall('(?<=\().*?(?=\))', c.text) for c in i.find_all('div')])) for i in result]
  return _titles, [a for *_, [a] in filter(None, data)]


_titles, _cpus = cpus(d.page_source))
conn.executemany("INSERT INTO cpu (name, family) VALUES (?, ?)", list(zip(_titles, _cpus)))
_last_page = soup(d.page_source, 'html.parser').find_all('a', {'href':re.compile('#page\=\d+')})[-1].text
for i in range(2, int(_last_page)+1):
   d.get(f'https://au.pcpartpicker.com/products/cpu/overall-list/#page={i}') 
   time.sleep(3)
   _titles, _cpus = cpus(d.page_source))
   conn.executemany("INSERT INTO cpu (name, family) VALUES (?, ?)", list(zip(_titles, _cpus)))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...