当前正在使用beautifulsoap构建网络刮板,以便通过提交邮政编码获得车身修理厂位置的列表。 (Website)
当我指定一个元素的ID(“ dl-zipcode”)并尝试查看其是否有效时,它一直在下面说一个错误:
search_box = soup.find_element_by_id(“ dl-zipcode”)
TypeError:“ NoneType”对象不可调用
我已经搜索了几个小时的答案,并决定问一下,因为找不到解决方法。
下面是我的代码:
import requests
from bs4 import BeautifulSoup
URL = 'https://owners.honda.com/collision/profirstbodyshop/'
headers = {"User-Agent": 'Mozilla/5.0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~'}
page = requests.get(URL, headers=headers)
soup = BeautifulSoup(page.content, 'html.parser')
myList = [28012, 28011]
results = []
for i in myList:
search_box = soup.find_element_by_id("dl-zipcode")
search_box.send_keys(i)
search_box.submit()
答案 0 :(得分:0)
将解析器更改为lxml应该可以解决您的问题,此外,您应该传递.text而不是.content。
soup = BeautifulSoup(page.text, 'lxml')
如果您想查看html.parser和lxml造成的差异,请查看diagnose():
https://www.crummy.com/software/BeautifulSoup/bs4/doc/#diagnose
答案 1 :(得分:0)
您必须找到表的输入并提交请求,在这种情况下,它应该是您要查找的以下行:
<input data-val="true" data-val-regex="You must enter a valid zip code." data-val-regex-pattern="^\d{5}(-\d{4})?$" data-val-required="The Zip field is required." id="from-zip" name="Zip" type="text" value="" />
然后基于此提交。希望对您有所帮助。一个例子在这里: Fill and submit html form