【问题标题】:I need to scrape numbers from a site but they don't have tags我需要从网站上抓取数字,但它们没有标签
【发布时间】:2022-01-17 15:13:54
【问题描述】:
import pandas as pd
from bs4 import BeautifulSoup
from selenium import webdriver
from selenium.webdriver.edge.service import Service
import re
driver = webdriver.Edge(service= Service("C:/Users/Peterven/Documents/msedgedriver.exe"))
#driver = webdriver.Edge(executable_path="C:/Users/Peterven/Documents/msedgedriver.exe")
driver.get("https://nigeria.startuphrtoolkit.com/top-startups-in-nigeria")
results = []
content = driver.page_source
soup = BeautifulSoup(content)
#print((soup.find("p", class_=False, id=False).find_next_sibling(text=True)))
driver.quit()
for element in soup.find_all(attrs= "wpb_wrapper"):
    name = element.findAll("strong")
    if name not in results:
        results.append(name)
        
#print(soup.find('strong':contains("Contact"))

即使我使用 findAll,抓取强标签也会返回父类中的第一个标签

【问题讨论】:

  • 获取html然后使用正则表达式抓取数据。
  • 请问您要获取什么数据?
  • 请澄清您的具体问题或提供其他详细信息以准确突出您的需求。正如目前所写的那样,很难准确地说出你在问什么。

标签: python selenium beautifulsoup


【解决方案1】:

联系人是静态的,因此您不需要浏览器的开销。

最简单的方法是找到一个模式,例如css 选择器列表,它将列表划分为可以循环并从中提取所需联系号码的部分。

您可以使用许多 CSS 选择器列表。一个相当稳定的,IMO,将是

.vc_column-inner:has(h3:not(:-soup-contains("Conclusion")))

:not 用于排除最终的结论块。

一旦你有你的块/列表循环然后你可以整合你当前尝试使用:contains:-soup-contains 来提取数字


import requests
from bs4 import BeautifulSoup as bs

r = requests.get('https://nigeria.startuphrtoolkit.com/top-startups-in-nigeria', headers = {'User-Agent':'Mozilla/5.0'})
soup = bs(r.content, 'lxml')
sections = soup.select('.vc_column-inner:has(h3:not(:-soup-contains("Conclusion")))')

for section in sections:
    
    print(section.select_one('h3').text)
    
    contact = section.select_one('strong:-soup-contains("Contact")')
    
    if contact is None:
        print('No contact number')
    else:
        print(contact.next_sibling.replace(':', '').strip())
    print()

【讨论】:

    猜你喜欢
    • 2017-12-16
    • 1970-01-01
    • 2022-11-22
    • 1970-01-01
    • 2020-07-07
    • 1970-01-01
    • 1970-01-01
    • 2018-12-08
    • 1970-01-01
    相关资源
    最近更新 更多