我尝试在使用下面的代码将数据发布到表单后刮取一个网页。在
import bs4 as bs
import urllib.request
import requests
import webbrowser
import urllib.parse
url_for_parse = "http://demo.testfire.net/feedback.aspx"
#PARSE THE WEBPAGE
sauce = urllib.request.urlopen(url_for_parse).read()
soup = bs.BeautifulSoup(sauce,"html.parser")
#GET FORM ATTRIBUTES
form = soup.find('form')
action_value = form.get('action')
method_value = form.get('method')
id_value = form.get('id')
#POST DATA
payload = {'txtSearch':'HELLOWORLD'}
r = requests.post(url_for_parse, payload)
#PARSING ACTION VALUE WITH URL
url2 = urllib.parse.urljoin(url_for_parse,action_value)
#READ RESPONSE
response = urllib.request.urlopen(url2)
page_source = response.read()
with open("results.html", "w") as f:
f.write(str(page_source))
searchfile = open("results.html", "r")
for line in searchfile:
if "HELLOWORLD" in line:
print ("STRING FOUND")
else:
print ("STRING NOT FOUND")
searchfile.close()
代码是正确的。响应网页被成功地刮取并存储在结果.html. 在
但是,我想在post_数据执行后刮取网页。因为每次我运行代码都会得到一个结果:String Not Found.这意味着在执行post_数据之前对结果页面进行爬网。在
如何修改代码,使表单成功提交,然后源代码存储在本地文件中。?
对于上述过程,是否建议使用替代框架而不是漂亮的脚本?在
很明显你在做什么。在
但是你应该怎么做。在
^{pr2}$为此,您需要将r.content写入本地文件并搜索字符串
修改代码如下:
注意:您需要将有效负载发送到url2,而不是初始URL(URL_for \u parse)
在请求.post调用将是您要通过的HTML。你可以通过
但是,在我的测试中,它说我没有认证,所以我假设你已经认证了?在
我还建议完全使用请求,而不是对get和post使用urllib。在
在请求之间持久化会话参数可能是个好主意。在
http://docs.python-requests.org/en/master/user/advanced/#session-objects
这个关键点就是你正在调用并等待的
^{pr2}$只是发到http://demo.testfire.net/comment.aspx
相关问题 更多 >
编程相关推荐