Python请求无法提供完整的响应

时间:2019-06-14 17:56:15

标签: python web-scraping beautifulsoup python-requests

我目前正在学习网页抓取。今天,我尝试通过网络进行google.com搜索。当我尝试使用python请求库发出get请求时,它不能为我提供完整的响应。

例如,如果我调用此URL https://www.google.com/search?q=tea+meaning来获取tea单词的含义,则在结果响应中,它仅显示名词内容,而不显示动词内容。

from bs4 import BeautifulSoup as bs
import requests as req

headers_Get = {
    'Host': 'www.google.com',
    'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/74.0.3729.169 Chrome/74.0.3729.169 Safari/537.36',
    'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
    'Accept-Language': 'en-US,en;q=0.5',
    'Accept-Encoding': 'gzip, deflate',
    'DNT': '1',
    'Connection': 'keep-alive',
    'Upgrade-Insecure-Requests': '1'
}

url = "https://www.google.com/search?q=tea+meaning"
response = req.get(url, headers=headers_Get)

data = response.text
soup = bs(data, "html.parser")

这里的问题是这种汤。它不包含动词内容。 为什么会这样?

enter image description here

谢谢。

2 个答案:

答案 0 :(得分:0)

问题在于Google没有将搜索结果作为一页发回。在浏览器中,搜索结果中您看到的大多数内容都是单独的AJAX请求。您可能会在初始请求中得到一些部分数据,但不一定与常规浏览器中看到的数据匹配。

要了解“ Beautiful Soup and Requests”的内容,请尝试在关闭JavaScript的浏览器中打开链接。

答案 1 :(得分:0)

您应该选择要打印的<div>。您将获得整个页面。

import requests
from bs4 import BeautifulSoup
url = "https://www.google.com/search?q=tea+meaning"
header={'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2227.0 Safari/537.36'}
page=requests.get(url,headers=header)

soup=BeautifulSoup(page.content,'html.parser')
result = soup.select_one('div.vmod').get_text()
print(result)

此代码显示所有内容,包括动词。 嘿,如果您想获取含义,可以在https://developer.oxforddictionaries.com/尝试使用它