我试图搜索网页(http://www.phillyhistory.org/historicstreets/)。我认为相关的源代码html是这样的:
<input name="txtStreetName" type="text" id="txtStreetName">
您可以在网站上看到其他源HTML。我想进入该文本框并输入街道名称并下载输出(即在页面的搜索框中输入&#39; Jefferson&#39;并查看Jefferson的历史街道名称)。我尝试过使用requests.post,并尝试在url中键入?get = Jefferson来测试它是否运行正常。任何人有任何想法如何获得此页面?谢谢,
卡梅伦
我目前尝试的代码(一些导入未使用,因为我打算解析等):
import requests
from bs4 import BeautifulSoup
import csv
from string import ascii_lowercase
import codecs
import os.path
import time
arrayofstreets = []
arrayofstreets = ['Jefferson']
for each in arrayofstreets:
url = 'http://www.phillyhistory.org/historicstreets/default.aspx'
payload = {'txtStreetName': each}
r = requests.post(url, data=payload).content
outfile = "raw/" + each + ".html"
with open(outfile, "w") as code:
code.write(r)
time.sleep(2)
这不起作用,只给了我下载的默认网页(即杰斐逊没有进入搜索栏并检索。
答案 0 :(得分:2)
我猜测你对'requests.post&#39;的推荐。与python的请求模块有关。
由于您尚未指定要从搜索结果中删除的内容,因此我只会为您提供一个代码段来获取给定搜索查询的html:
import requests
query = 'Jefferson'
url = 'http://www.phillyhistory.org/historicstreets/default.aspx'
post_data = {'txtStreetName': query}
html_result = requests.post(url, data=post_data).content
print html_result
如果您需要进一步处理html文件以提取一些数据,我建议您使用Beautiful Soup模块来执行此操作。
更新版本:
#!/usr/bin/python
import requests
from bs4 import BeautifulSoup
import csv
from string import ascii_lowercase
import codecs
import os.path
import time
def get_post_data(html_soup, query):
view_state = html_soup.find('input', {'name': '__VIEWSTATE'})['value']
event_validation = html_soup.find('input', {'name': '__EVENTVALIDATION'})['value']
textbox1 = ''
btn_search = 'Find'
return {'__VIEWSTATE': view_state,
'__EVENTVALIDATION': event_validation,
'Textbox1': '',
'txtStreetName': query,
'btnSearch': btn_search
}
arrayofstreets = ['Jefferson']
url = 'http://www.phillyhistory.org/historicstreets/default.aspx'
html = requests.get(url).content
for each in arrayofstreets:
payload = get_post_data(BeautifulSoup(html, 'lxml'), each)
r = requests.post(url, data=payload).content
outfile = "raw/" + each + ".html"
with open(outfile, "w") as code:
code.write(r)
time.sleep(2)
我/您的第一个版本中的问题是我们没有发布所有必需的参数。要找出您需要发送的内容,请在浏览器中打开网络监视器(在Firefox中按Ctrl + Shitf + Q),然后按照正常情况进行搜索。如果您在网络日志中选择了POST请求,则右侧会显示&#39; parameters选项卡&#39;您浏览器发送的帖子参数的位置。