我正在收集一些网站元数据。有些网站会根据我的位置提供本地版本,我可以避免这种情况吗?
这是我目前正在做的事情:
import requests
from bs4 import BeautifulSoup
source = requests.get('http://www.youtube.com').text
source_soup = BeautifulSoup(source, 'lxml')
current_description = source_soup.find_all('meta', attrs={'name': 'description'})
print(current_description)
得到的结果是:
[<meta content="Auf YouTube findest du großartige Videos und erstklassige Musik. Außerdem kannst du eigene Inhalte hochladen und mit Freunden oder mit der ganzen Welt teilen." name="description"/>]
这是我想要的,但是对于德语版本的网站。我希望使用英文版本,以尽可能避免使用其他语言。由于我想抓取许多不同的网站,因此我几乎无法手动更改URL来强制使用英语或类似语言。
请求模块有解决方案吗?我唯一的其他想法是使用VPN,但这似乎很麻烦。
答案 0 :(得分:1)
您可以将其添加到headers参数中:
import requests
from bs4 import BeautifulSoup
headers = {'accept-language': 'en-US,en;q=0.9,en-GB;q=0.8'}
source = requests.get('http://www.youtube.com' ,headers=headers).text
source_soup = BeautifulSoup(source, 'lxml')
current_description = source_soup.find_all('meta', attrs={'name': 'description'})
print(current_description)
请注意,如果将其更改为de
,我会得到德语。
import requests
from bs4 import BeautifulSoup
headers = {'accept-language': 'de'}
source = requests.get('http://www.youtube.com' ,headers=headers).text
source_soup = BeautifulSoup(source, 'lxml')
current_description = source_soup.find_all('meta', attrs={'name': 'description'})
print(current_description)
输出:
[<meta content="Auf YouTube findest du großartige Videos und erstklassige Musik. Außerdem kannst du eigene Inhalte hochladen und mit Freunden oder mit der ganzen Welt teilen." name="description"/>]
fr
给了我法语:
import requests
from bs4 import BeautifulSoup
headers = {'accept-language': 'fr'}
source = requests.get('http://www.youtube.com' ,headers=headers).text
source_soup = BeautifulSoup(source, 'lxml')
current_description = source_soup.find_all('meta', attrs={'name': 'description'})
print(current_description)
输出:
[<meta content="Profitez des vidéos et de la musique que vous aimez, mettez en ligne des contenus originaux, et partagez-les avec vos amis, vos proches et le monde entier." name="description"/>]