我在做拉网练习。我想得到欧洲的汽车销售数据,然后准备一些数据。
因此我发现http://carsalesbase.com/european-car-sales-data/是一个非常好的数据源。
我设法得到了一个特定制造商的特定车辆的销售数据。如果我修改了URL,我还可以访问多辆车的销售号码,可能还有多个制造商。在
这是我的代码:import requests
from bs4 import BeautifulSoup as bs
import numpy as np
import matplotlib.pyplot as plt
car_type=0
car_spec=['ford-focus','ford-fiesta','ford-ecosport']
my_url='http://carsalesbase.com/european-car-sales-
data/ford/'+car_spec[car_type]+'/'
page = requests.get(my_url)
soup = bs(page.content, 'html.parser')
t=soup.find("table")
rows=t.find_all('td')
我可以访问三辆福特汽车的销售数据。在
不过,我想迭代每个制造商的每辆车。
Carsalesbase为此提供了两个下拉菜单。
一个是给制造商的。我已经从菜单中读取了所有可能的值。
这是“值/文本”对:
^{pr2}$
第二个下拉列表是针对汽车本身的。只要在第一个菜单中没有选择汽车品牌,此选项只包含默认值。在第一个下拉列表中选择制造商后,第二个下拉列表将填充此制造商的所有汽车。
我想做的是编程填充第一个下拉菜单,这样我就可以读出第二个菜单了。在
在那之后,我相信我可以通过这个http方案访问所有的销售数据:
我在网络标签中的chrome开发工具中观察到了这一点。请注意,“品牌选项=17”对应于阿尔法罗密欧,它与我的手动输入相匹配。在
我想我缺少的是如何用程序来填充下拉菜单。在
有人能帮忙吗?在
ps:我读过关于Selenium的文章,它似乎是一个合适的工具,但是我不喜欢当你使用它的时候浏览器会打开。一定有更简单的方法。在
谢谢!在
附加:
经过一番研究,我发现不管怎样,你都可以用我正在使用的请求包来完成。这似乎是html中的相关部分:
role="search">
Select Brand
GroupAlfa Romeo
Alpina ... Volkswagen
Volvo
Select Model
但还是不知道该怎么填。在