我试图了解网络互动,特别是使用请求。
为此,我有兴趣使用Python with Requests从OReillyAuto.com下载汽车零件清单但是我遇到了打嗝。
当我浏览this url时,它应该显示我所指定的汽车类型的刹车片和鞋子列表。然而,它会弹出一组单选按钮,询问我是否要查看左侧,右侧或所有部件的部件。
我不能为我的生活弄清楚如何进行选择并获得我在Chrome开发工具中看到的HTML,其中包含品牌名称,价格等列表。
我尝试过很多东西,但这就是我现在所拥有的:
#import HTTP libraries
import requests
#import HTML parsing libraries
import bs4
url = 'http://www.oreillyauto.com/site/c/search/Brake+Pads+&+Shoes/C0068/C0009.oap?model=G6&vi=1432754&year=2006&make=Pontiac'
answerURL = 'http://www.oreillyauto.com/site/ConditionSelectServlet?answer=-1'
print("Making request")
session = requests.Session()
session.headers.update({'referer': url})
r = session.get(answerURL)
print(r.status_code)
oreillyList = bs4.BeautifulSoup(r.text, "lxml")
print("Writing response...")
logfile = 'C:/Users/mhurley/Portable_Python/notebooks/' + output + '.log'
with open(logfile, 'w') as file:
file.write(oreillyList.prettify())
print("...done writing "+logfile)
我希望我写的日志文件中包含大约5200行,就像我在查看页面源时一样。"但是,我只获得了大约3000行,看起来该列表中没有任何部分。
也许我真的得到了我的想法,但我没有正确地解释它。有关如何通过此对话请求的任何提示?
编辑:我怀疑这是与我的目的相关的HTML:
<div id="forcedVehicleQuestions" class="forcedUserInput" style="display: block; position: absolute; left: 50%; top: 40px; z-index: 6000; margin-left: -199px; margin-top: 0px;">
<div class="forcedContents clearfix">
<a class="btn-remove" onclick="closeForced('Search','question');">
<svg><use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#shape-remove"></use></svg>
</a>
<form name="forcedQuestionsForm" id="forcedQuestionsForm">
<h2 class="sans">
More Product Info Required
</h2>
<p id="questionText" class="questionText">
Brake Pads - Position
</p>
<div id="forceQuestionsRadio">
<div class="form-row">
<label class="questionRadio checkbox-radio" id="questionRadio" for="Front">
<input type="radio" id="Front" name="answer" value="10219">
Front
</label>
</div>
<div class="form-row">
<label class="questionRadio checkbox-radio" id="questionRadio" for="Rear">
<input type="radio" id="Rear" name="answer" value="10290">
Rear
</label>
</div>
<div class="form-row">
<label class="questionRadio checkbox-radio" id="questionRadio" for="Show all">
<input type="radio" id="Show all" checked="" name="answer" value="-1">
Show all
</label>
</div>
</div>
<input id="questionSubmit" type="button" class="btn btn-green btn-shadow" value="Continue" onclick="setQuestionAnswer('Brake Pads - Position',document.forms['forcedQuestionsForm'].elements['answer'],'Show all');">
<div id="forcedVehicleQuestionsLoading" class="loading load-sm">
<div class="spinner"></div>
</div>
</form>
</div>
</div>
我很难理解如何与此<form>
元素进行交互。如何制作&#34; onclick =&#34;发生这样以便提交表单?
答案 0 :(得分:-1)
您需要结合使用Selenium + BeautifulSoup。
首先,您将使用selenium在浏览器中打开网页,选择正确的单选按钮,然后提交表单。
在此之后,使用BeautifulSoup解析制动页面。