刮取网页<;ul>&书信电报;李>;(Python) 问题:

刮取网页<;ul>&书信电报;李>;(Python) 问题:,python,html,python-3.x,beautifulsoup,python-requests-html,Python,Html,Python 3.x,Beautifulsoup,Python Requests Html,有一个网站在下有一个列表,列表中的每个项目都包含一个类标题,该类中还有两个元素第一个元素有一些文本示例3.4 GHz 6核(Pinnacle Ridge)我想删除所有不在括号中的文本以获得Pinnacle Ridge。在列表被删除后,我想通过更改#page=,进入下一页 代码: 我不太确定A只有片段,但这里是: 从请求\u html导入HTMLSession session=HTMLSession() r=session.get('https://au.pcpartpicker.com/prod

有一个网站在
下有一个列表
  • ,列表中的每个项目都包含一个
    类标题,该类中还有两个
    元素第一个元素有一些文本示例3.4 GHz 6核(Pinnacle Ridge)我想删除所有不在括号中的文本以获得Pinnacle Ridge。在列表被删除后,我想通过更改#page=,进入下一页

    代码: 我不太确定A只有片段,但这里是:

    从请求\u html导入HTMLSession session=HTMLSession()

    r=session.get('https://au.pcpartpicker.com/product/cpu/overall-list/#page="(附页)
    table=r.html.find('.ul')
    //不确定找到每个
  • 第一个 垃圾,名称=div.split('(') 名称。替换(“(”,“”) 名称。替换(“)”,“”)
  • 预期结果: 我想循环浏览每一页,直到没有人留下来查找每个列表并获取不需要保存的名称,因为我有代码在创建列表时保存它

    如果你需要更多的信息,请告诉我


    感谢

    站点是动态的,因此,您必须使用
    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)))
    
    从bs4导入BeautifulSoup作为汤
    从selenium导入webdriver
    导入时间,re
    d=webdriver.Chrome(“/path/to/chromdriver”)
    d、 得到('https://au.pcpartpicker.com/products/cpu/overall-list/#page=1')
    def CPU(_源):
    result=soup(_source,'html.parser')。find('ul',{'id':'category_content'})。find_all('li'))
    _titles=list(结果中i的筛选器(None,[(lambda x:“”如果x不是其他x.text)(i.find('div',{'class':'title'})))
    
    数据=[列表(过滤器(无,[re.findall')”(?我刚刚意识到是否也可以每次抓取名称,以便将其匹配到我的数据库中?名称和家族的两个变量是什么?是否为_titles?@Uskompuf很抱歉不清楚。输出是一个字典列表,每个字典的键是title,值是CPU名称。因为按原样,您的程序不会打印任何内容还有什么方法可以把名字和家族分成两个变量,每次循环中有一个新的变量时,它们都会被更新,这样我就可以将它们插入MySQL?@Uskompuf请查看我最近的编辑。现在,有变量
    \u titles
    \u CPU
    ,每个变量都列出了每次迭代时存储标题和CPU的列表。
    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)))