Google 在进行本地搜索时将其主页提供给 urllib2
Google serves its homepage to urllib2 when a local search is made
当在 Google 上完成本地搜索时,用户点击地图下方的 'More ...' link,然后将用户带到 this.
如果URL:
https://www.google.com/ncr#q=chiropractors%2BNew+York,+NY&rflfq=1&rlha=0&tbm=lcl
被复制并粘贴回浏览器,正如预期的那样,到达同一页面。同样,当使用 WebDriver 打开浏览器时,直接访问 URL 会将 WebDriver 带到同一页面。
但是,当尝试使用 urllib2 请求同一页面时,Google 为其提供主页 (google.com),并且这意味着,除其他外,lxml 的提取功能无法使用。
虽然 urllib2 不是这里的罪魁祸首(也许 Google 对所有无头请求做同样的事情),有没有办法让 Google 到提供所需的页面?使用 requests
库的快速测试表明存在同样的问题。
我认为这里的重要提示在 URL:
https://www.google.com/ncr#q=chiropractors%2BNew+York,+NY&rflfq=1&rlha=0&tbm=lcl
你注意到那里有那个哈希字符 (#
) 了吗?散列组件之后的所有内容都不会真正发送到服务器,因此服务器无法处理它。这表明(在这种情况下)您在 WebDriver 和浏览器中看到的页面是客户端脚本的结果。
当您加载页面时,您的浏览器会发送对 https://www.google.com/ncr
和 google returns 主页的请求。主页包含 javascript 分析散列后的组件并使用它生成您 期望 看到的页面。浏览器和 Webdriver 可以执行此操作,因为它们处理 javascript。如果您在浏览器中禁用 javascript 并转到 link,您将看到该页面也没有生成。
urllib2 然而,不处理 javascript。它所看到的只是网站最初与 javascript 一起发送的 HTML,但它无法处理实际生成您期望的页面的 javascript。
Google 正在为您请求的页面提供服务,但您的问题是 urllib2 无法呈现它。要解决此问题,您必须使用支持 Javascript 的抓取框架。在这种特殊情况下,您可以选择使用 Google 的非 javascript 版本进行抓取。
当在 Google 上完成本地搜索时,用户点击地图下方的 'More ...' link,然后将用户带到 this.
如果URL:
https://www.google.com/ncr#q=chiropractors%2BNew+York,+NY&rflfq=1&rlha=0&tbm=lcl
被复制并粘贴回浏览器,正如预期的那样,到达同一页面。同样,当使用 WebDriver 打开浏览器时,直接访问 URL 会将 WebDriver 带到同一页面。
但是,当尝试使用 urllib2 请求同一页面时,Google 为其提供主页 (google.com),并且这意味着,除其他外,lxml 的提取功能无法使用。
虽然 urllib2 不是这里的罪魁祸首(也许 Google 对所有无头请求做同样的事情),有没有办法让 Google 到提供所需的页面?使用 requests
库的快速测试表明存在同样的问题。
我认为这里的重要提示在 URL:
https://www.google.com/ncr#q=chiropractors%2BNew+York,+NY&rflfq=1&rlha=0&tbm=lcl
你注意到那里有那个哈希字符 (#
) 了吗?散列组件之后的所有内容都不会真正发送到服务器,因此服务器无法处理它。这表明(在这种情况下)您在 WebDriver 和浏览器中看到的页面是客户端脚本的结果。
当您加载页面时,您的浏览器会发送对 https://www.google.com/ncr
和 google returns 主页的请求。主页包含 javascript 分析散列后的组件并使用它生成您 期望 看到的页面。浏览器和 Webdriver 可以执行此操作,因为它们处理 javascript。如果您在浏览器中禁用 javascript 并转到 link,您将看到该页面也没有生成。
urllib2 然而,不处理 javascript。它所看到的只是网站最初与 javascript 一起发送的 HTML,但它无法处理实际生成您期望的页面的 javascript。
Google 正在为您请求的页面提供服务,但您的问题是 urllib2 无法呈现它。要解决此问题,您必须使用支持 Javascript 的抓取框架。在这种特殊情况下,您可以选择使用 Google 的非 javascript 版本进行抓取。