【问题标题】:Python - Beautifulsoup | ValueError: Unsupported or invalid CSS selector: "<div"Python - Beautifulsoup | ValueError:不支持或无效的 CSS 选择器:“<div”
【发布时间】:2018-09-14 09:07:38
【问题描述】:

我试图从 fareham.gov.uk 网页上抓取一个应用程序,但每次我尝试它都会返回一个错误而不是参考号。有人可以帮我解决这个问题吗?我是网络抓取的新手,每当我尝试用谷歌搜索修复时都没有任何效果。

错误:

Traceback (most recent call last):
  File "C:\Users\DBaldwin\Desktop\sel.py", line 39, in <module>
    div = soup.select('<div Class="docGridRow"><div Class="detailsCells detailsFieldNames">Reference</div><div Class="detailsCells detailsValues">')
  File "C:\Users\DBaldwin\Anaconda3\lib\site-packages\bs4\element.py", line 1477, in select
    'Unsupported or invalid CSS selector: "%s"' % token)
ValueError: Unsupported or invalid CSS selector: "<div"

代码:

import time
import urllib.request
from bs4 import BeautifulSoup
from selenium import webdriver

url = "http://www.fareham.gov.uk/casetrackerplanning/applicationsearch.aspx"

driver = webdriver.Chrome(executable_path=r"C:\Users\DBaldwin\Desktop\chromedriver.exe")
driver.get(url)

driver.find_element_by_id("lnkAllowCookies").click()

def rerun():
    driver.find_element_by_id("BodyPlaceHolder_uxLinkButtonShowAdvancedSearch").click()

    time.sleep(3)

    driver.find_element_by_id("uxStartDateDecisionTextBox").click()
    driver.find_element_by_id("uxStartDateDecisionTextBox").clear()
    driver.find_element_by_id("uxStartDateDecisionTextBox").send_keys("1/8/2018")

    driver.find_element_by_id("uxStopDateDecisionTextBox").click()
    driver.find_element_by_id("uxStopDateDecisionTextBox").clear()
    driver.find_element_by_id("uxStopDateDecisionTextBox").send_keys("308/2018")

    driver.find_element_by_id("BodyPlaceHolder_uxButtonSearch").click()

    time.sleep(3)

rerun()

elements = driver.find_elements_by_class_name("searchResultsCell")

for e in elements:
    e.click()
    newUrl = driver.current_url
    go = urllib.request.urlopen(newUrl)
    soup = BeautifulSoup(go.read(), "html.parser")
    div = soup.select('<div Class="docGridRow"><div Class="detailsCells detailsFieldNames">Reference</div><div Class="detailsCells detailsValues">')
    test = div[0].get_text()
    print(test)
    driver.back()
    rerun()
    print("Worked???")

【问题讨论】:

  • 你看过bs4 documentation吗? select 与 css 选择器合成器一起使用,而不是 html。
  • 那我该如何解决
  • 我真的不明白你在这里想做什么。您要选择什么?
  • div = soup.select('div.docGridRow)?
  • Daniel Roseman 我正在尝试在该网站上的一个应用程序上抓取参考号,如果您转到变量“url”中的链接,它会询问日期。在开始时输入 1/8/2018,在结束时输入 30/8/2018,单击第一个应用程序,您将看到参考 ID 和其他内容,我正在尝试让它刮掉

标签: python selenium web-scraping beautifulsoup


【解决方案1】:

尝试使用下面的代码来获取所需的值

elements = driver.find_elements_by_css_selector(".searchResultsCell a")
links = [link.get_attribute('href') for link in elements]

for link in links:
    driver.get(link)
    print(driver.find_element_by_css_selector('div.docGridRow').text)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-01-15
    • 2015-05-02
    • 2019-02-08
    • 2018-02-21
    • 1970-01-01
    • 2021-08-02
    • 1970-01-01
    相关资源
    最近更新 更多