【发布时间】:2014-02-06 09:13:42
【问题描述】:
好的,所以在终端中,在导入和制作必要的对象之后——我输入:
for links in soup.find_all('a'):
print(links.get('href'))
它给了我维基百科页面上的所有链接(大约 250 个)。没问题。
但是,在我正在编写的程序中,我只收到大约 60 个链接(这是在抓取同一个维基百科页面),而我得到的那些链接大多一文不值。我仔细检查了我的初始化是否完全相同——唯一的区别是变量的名称。作为参考,这是我设置 BS4 对象并获取所需页面的函数:
def get_site(hyperLink):
userSite = urllib3.PoolManager()
siteData = userSite.request("GET", hyperLink)
bsd = BeautifulSoup(siteData.data)
return bsd
稍后,我抓取这些元素并将它们附加到一个列表中,然后我将对其进行操作:
def find_urls(bsd, urls, currentNetloc):
for links in bsd.find_all('a'):
urls.append(links.get('href'))
return urls
其他相关信息:
- 我使用的是 Python 3.3
- 我正在使用 urllib3、BeautifulSoup 4 和 urlparse(来自 urllib)
- 我在 PyCharm 工作(用于实际程序)
- 如果重要,请使用 Lubuntu。
在运行 python3 的命令行实例并导入“sys”后,我输入并收到:
$ sys.executable
'/usr/bin/python3'
$ sys.path
['', '/usr/local/lib/python3.3/dist-packages/setuptools-1.1.5-py3.3.egg', '/usr/local/lib/python3.3/dist-packages/pip-1.4.1-py3.3.egg', '/usr/local/lib/python3.3/dist-packages/beautifulsoup4-4.3.2-py3.3.egg', '/usr/lib/python3.3', '/usr/lib/python3.3/plat-i386-linux-gnu', '/usr/lib/python3.3/lib-dynload', '/usr/local/lib/python3.3/dist-packages', '/usr/lib/python3/dist-packages']
在 Pycharm 项目中运行这些命令后,我收到了完全相同的结果,除了包含我的 pycharm 项目的目录包含在列表中。
【问题讨论】:
-
你能举一个你遇到这些问题的维基百科页面的例子吗?
-
是的。例如,我用en.m.wikipedia.org/wiki/Lyceum_(Classical) 做了很多测试。我注意到在终端中我得到了一个链接,比如“古希腊”,但是在我的编码项目中,它几乎跳过了该页面内容中的所有链接,并且大部分都是通用链接。
-
再次检查:您在终端中使用的解释器和 PyCharm 使用的解释器是否相同?
-
当我通过 py charm 运行程序时,缺少抓取的 url。当我说通过终端正常运行它时,我的意思是一个实际的 Linux 终端。如果你的问题是关于哪个版本的 python,那么是的,我在命令行和 pycharm 中都使用了 python 3
-
对于简短和任何语法错误,我也很抱歉,我现在正在打电话。
标签: python beautifulsoup screen-scraping python-3.3