Python 使用urllib.urlopen()时网页的源代码不可用

Python 使用urllib.urlopen()时网页的源代码不可用,python,beautifulsoup,urllib2,Python,Beautifulsoup,Urllib2,我正在尝试从获取视频链接https://www.youtube.com/trendsdashboard#loc0=ind“。当我检查元素时,它会显示每个视频的源html代码。在源代码中使用 urllib2.urlopen("https://www.youtube.com/trendsdashboard#loc0=ind").read() 它不显示视频的html源代码。还有别的办法吗 <a href="/watch?v=dCdvyFkctOo" alt="Flipkart Wish Cha

我正在尝试从
获取视频链接https://www.youtube.com/trendsdashboard#loc0=ind“
。当我检查元素时,它会显示每个视频的源html代码。在源代码中使用

urllib2.urlopen("https://www.youtube.com/trendsdashboard#loc0=ind").read()
它不显示视频的html源代码。还有别的办法吗

<a href="/watch?v=dCdvyFkctOo" alt="Flipkart Wish Chain">
        <img src="//i.ytimg.com/vi/dCdvyFkctOo/hqdefault.jpg" alt="Flipkart Wish Chain">
      </a>

当我们从浏览器中检查元素时,会出现此简单代码,但在
urllib

检索的源代码中不会出现此代码

import urllib2
url = 'https://www.youtube.com/trendsdashboard#loc0=ind'
html = urllib.urlopen(url).read()
在我看来,我会使用
请求
而不是
urllib
——这更容易使用:

import requests
url = 'https://www.youtube.com/trendsdashboard#loc0=ind'
response = requests.get(url)
html = response.content
编辑

这将获得解析html的所有
的列表:

from bs4 import BeautifulSoup
soup = BeautifulSoup(html)
links = [tag for tag in soup.findAll('a') if tag.has_attr('href')]

要查看源代码,需要使用
read
方法 如果你只是使用open,它会给你类似的东西

In [12]: urllib2.urlopen('https://www.youtube.com/trendsdashboard#loc0=ind')
Out[12]: <addinfourl at 3054207052L whose fp = <socket._fileobject object at 0xb60a6f2c>>

每当你比较Python代码和Web浏览器的源代码时,不要通过昆虫元素,右键点击网页并点击查看源代码,你就会找到真正的源代码。Inspect元素显示由创建的网络请求以及正在执行的javascript代码返回的聚合源代码


在打开网页之前,请保持开发人员控制台打开,保持在网络选项卡上,并确保在Firefox中为Chrome打开“保留日志”或为Firebug打开“持久化”,然后您将看到所有网络请求。

我们还需要将数据解码为utf-8。 代码如下:

只用 响应。解码('utf-8')
打印(响应)

您可以添加用于访问YouTube页面的部分代码吗?是的。您刚刚将一个套接字连接到网页,但没有从中读取。@wanderlust:是的,请检查是否已更新code@AdityaJoshi:已经完成了,遗漏了问题中的read(),已更新。谢谢,您能看到
/watch?v=dCdvyFkctOo
和我在“源代码”中所述的其他源代码吗,尝试在标头中发送用户代理字符串。这是一个非常重要的部分。在这种情况下,请求库更易于使用。我将发布一个示例。谢谢,但我在inspect元素中看到的代码不会出现在页面源代码中。我期待视频网址,这是有在页面上,但并没有出现,当我得到源页面?这就是我的意思。该源代码与通过Python代码接收的源代码相同。因此,请查看我在回答中解释的网络选项卡,并尝试查看所有请求都发出了什么。再次感谢,但网络选项卡显示为emtry,即使在“保留”选项卡勾选之后。实际上,您无法正确使用它。你在用Chrome吗?另外,只有在打开“网络”选项卡并单击“保留日志”后才能加载网页。@nlper您可能需要为此使用Mechanize模块Mechanize模块的任何链接或示例?这实际上是一个注释,而不是答案。再重复一点。目前,我已经为你添加了评论,我将此帖子标记为删除。
urllib2.urlopen('https://www.youtube.com/trendsdashboard#loc0=ind').read()