我创建了一个脚本,从两个相同的链接中获取不同容器的链接。就第一页而言,脚本做得很好。然而,在底部有一个按钮View More
,它没有任何与之相关联的链接,因此,我无法使用请求获取其余部分。为了清晰起见,下图表示第一个链接的第一个容器
我试过:
import requests
from bs4 import BeautifulSoup
base = 'https://hipages.com.au{}'
links = (
'https://hipages.com.au/find/antenna_services/sa/adelaide',
'https://hipages.com.au/find/antenna_services/vic/melbourne'
)
with requests.Session() as s:
s.headers['User-Agent'] = 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.111 Safari/537.36'
for link in links:
r = s.get(link)
soup = BeautifulSoup(r.text,"html5lib")
for item in soup.select("[class*='BusinessListingHeaderColumn'] a:has(> h3)[href]"):
print(base.format(item.get("href")))
How can I get the links from all the containers making use of
view more
button using requests?
这是我想要的输出类型:
https://hipages.com.au/connect/cinemaathome
https://hipages.com.au/connect/mrcommunications
https://hipages.com.au/connect/adelaidevideoscreens
requests
可能不是此类作业的最佳工具,因为您必须不断动态地向页面添加更多内容一个解决方法是使用API,因为有一个API。但是我发现这个请求有几个问题,例如:
category=145
值映射到它的名称李>code
部分的来源李>另一个解决方法是,一直单击
View more
按钮,直到没有这样的按钮为止。然后,从页面的“最终”版本中删除与css
选择器匹配的所有URL重复下一个url,以此类推
怎么做?输入
selenium
另外,要运行这个程序,除了
selenium
模块之外,还需要Chrome驱动程序。有关安装说明,请参见this守则:
此输出(对于Adeladie):
编辑:
这是基于你和我分享的你自己的答案。基本上,您无法跳出循环,因为API不断地为您提供最后一个页面,即使它是相同的页面
所以,我们需要知道什么时候我们看到了页面或下面的链接。下面是我的尝试,它归结为检查API中的任何潜在链接是否在所有后续链接列表中。如果是这样,我们已经看到了这个API页面。是时候转到下一个URL了
相关问题 更多 >
编程相关推荐