这是我的第一篇文章,所以我道歉如果它是重复但我找不到与我相关的答案。如果有,请告诉我,我会检查出来。
我试图抓一个网站(下面)找到伯克利的租金上限,我遇到的麻烦是我似乎无法弄清楚如何在搜索框中插入一个地址并从下一个地方获取信息页。过去,我使用的网址会随搜索输入而变化,但不会在此网站上更改。我认为我最好的选择是使用bs4
来抓取信息,request.session
和requests.post
来到每个后续地址。
#Berkeley Rent Scrape
from bs4 import BeauitfulSoup
import sys
import requests
import openpyxl
import pprint
import csv
#wb = openpyxl.load_workbook('workbook.xlsx', data_only=True)
#sheet = wb.get_sheet_by_name('worksheet')
props_payload={'aspnetForm':'1150 Oxford St'}
URL = 'http://www.ci.berkeley.ca.us/RentBoardUnitSearch.aspx'
s = requests.session()
p = s.post(ULR, data = props_payload)
soup = BeauitfulSoup(p.text)
data = soup.find_all('td', class="gridItem")
更新一旦发送帖子,您如何从新网页获取信息?或者换句话说,什么是使用request.post的框架,然后当URL没有改变时,request.get或bs4刮擦?
我认为它看起来像这样,但我确定我需要在那里的某处获得GET请求,但是当URL没有变化时,不要理解会话是如何工作的。
我将信息导出到csv文件和excel表,但我可以稍后处理。只是想把肉拿走。
感谢您的帮助!
答案 0 :(得分:0)
正如您在链接中看到的,此搜索不通过重定向,因此您无法将查询传递到URL。 我不确定如何直接使用ASP.NET后端(由于后端的身份验证/验证,它可能会很棘手)。 我认为一些自动化(测试)工具可以帮助你(例如PhantomJS和/或CasperJS)。它使您可以控制渲染的网页,您可以以编程方式将查询放入输入并在响应后获取数据