对于一个额外的课程学校项目,我正在学习如何刮取一个网站。正如您在下面的代码中所看到的,我能够抓取一个名为“elqFormRow”的表单。离开一页。
如何抓住所有出现的'elqFormRow'总的来说website?我想将表单所在位置的URL返回到列表中,但这样做会遇到麻烦,因为我不知道怎么做。
app.config(['$locationProvider', 'adalAuthenticationServiceProvider', '$httpProvider', function($locationProvider, adalAuthenticationServiceProvider, $httpProvider) {
$locationProvider.html5Mode(true).hashPrefix('!');
$locationProvider.html5Mode(true).hashPrefix('!');
var endpoints = {
"http://garycors.azurewebsites.net": "bce85948-9ea4-4738-b1e6-972f3d30f4da",
// "http://garycors.azurewebsites.net": "90e54701-ff93-414c-b7ee-c2d9b01417f3",
};
adalAuthenticationServiceProvider.init({
tenant: "<tenant_id>", // Optional by default, it sends common
clientId: "<client_id>",
cacheLocation: 'sessionStorage'
},
$httpProvider // pass http provider to inject request interceptor to attach tokens
);
$httpProvider.interceptors.push('httpRequestInterceptor');
}]);
app.factory('httpRequestInterceptor', function () {
return {
request: function (config) {
config.headers['Authorization'] = 'Bearer ' + sessionStorage.getItem("adal.idtoken");
return config;
}
};
});
答案 0 :(得分:0)
您可以从页面抓取网址并按照它们(可能)抓取整个网站。这样的东西,需要一点点按摩,这取决于你想要开始的地方和你想要的页面:
import bs4 as bs
import requests
domain = "engage.hpe.com"
initial_url = 'http://engage.hpe.com/Template_NGN_Convert_EG-SW_Combined_TEALIUM-RegPage'
# get urls to scrape
text = requests.get(initial_url).text
initial_soup = bs.BeautifulSoup(text, 'lxml')
tags = initial_soup.findAll('a', href=True)
urls = []
for tag in tags:
if domain in tag:
urls.append(tag['href'])
urls.append(initial_url)
print(urls)
# function to grab your info
def scrape_desired_info(url):
out = []
text = requests.get(url).text
soup = bs.BeautifulSoup(text, 'lxml')
for div in soup.find_all('div', class_='elqFormRow'):
out.append(div.text.strip())
return out
info = [scrape_desired_info(url) for url in urls if domain in url]
URLlib发臭,使用请求。如果您需要在站点中向下移动多个级别,请将URL查找部分放在一个函数中并将其调用X次,其中X是您想要遍历的链接级别数。
负责任地刮。尽量不要进入魔法师的学徒状态,在这种情况下你会在一个循环中反复访问该网站,或者跟随该网站外部的链接。一般来说,我也没有提出你要抓的页面的问题。