我想从页面中抓取数据:https://broward.county-taxes.com/public/real_estate/parcels/494101-09-1060/bills
有一张桌子,我需要:
- 获取表上的第一行
- 单击此项目
- 刮取Ad Valorem Taxes部分("税务局"one_answers"MILLAGE"(数据
我已经使用python-selenium实现了一个脚本,它可以在本地工作(linuxmint19(。当我部署到服务器并在服务器端运行相同的程序(ubuntu(时,不起作用
问题是,当我加载"账单"页面时,它根本不会加载任何表和表数据。我已经打印出驱动程序page_source,并且缺少表。
如有任何建议,不胜感激。
下面的函数源代码。
奇怪的是,它在本地可以工作,但在服务器端却不行!
def download_tax_bill_form(self, formatted_apn):
"""
Scrape county tax bill table by specified 'apn'
:param formatted_apn: The case apn formatted
Returns:
- scraped dictionary object
{
ad_valorem_taxes: [
{
'group_name': 'BROWARD COUNTY GOVERNMENT',
'items': [
{
'name': 'COUNTYWIDE SERVICES',
'millage': 5.49990
},
...
]
},
...
]
}
"""
if self.driver is None:
# create chrome driver
self.driver = self.create_driver()
# go to bills page by 'apn'
self.driver.get(f'https://broward.county-taxes.com/public/real_estate/parcels/{formatted_apn}/bills')
self.driver.implicitly_wait(5)
# click on the first table row (last year bill)
WebDriverWait(self.driver, 20).until(
EC.element_to_be_clickable(
(
By.XPATH,
"(//table[@class='table table-hover bills']/tbody)[1]/tr/th/a[1]"
)
)
).click()
# get table items from requested table
ad_valorem_taxes_items = self.driver.find_elements_by_xpath("//div[@class='row advalorem']/div/table/tbody")
groups = []
group = {}
# transform table results to dict
for item in ad_valorem_taxes_items:
class_name = item.get_attribute("class")
if class_name == 'district-group':
if group:
groups.append(group)
group = {}
group_name = item.find_element_by_xpath('.//tr/th').text
group["group_name"] = group_name
group["items"] = []
elif class_name == 'taxing-authority':
name = item.find_element_by_xpath(".//tr/th[@class='name']").text
try:
millage = float(item.find_element_by_xpath(".//tr/td[@class='millage']").text)
except ValueError:
millage = None
group_item = {
"name": name,
"millage": millage
}
group["items"].append(group_item)
# add last group
groups.append(group)
return {"ad_valorem_taxes": groups}
我猜用户代理请求标头不同,因此页面显示的内容不同,您可以尝试将脚本中的用户代理标头设置为与工作机上的值类似
例如:
from selenium.webdriver.chrome.options import Options
opts = Options()
opts.add_argument('user-agent="Your user Agent Goes here!!"')
driver = webdriver.Chrome(chrome_options=opts)
你可以通过谷歌搜索找到你的用户代理;我的用户代理";或者通过在浏览器中检查请求("标题选项卡,请求标题,用户代理"(