gpt4 book ai didi

python - BeautifulSoup 不会使用 .find_all ('a' 抓取页面中的所有 anchor 标签。我忽略了什么吗?

转载 作者:行者123 更新时间:2023-11-28 17:43:34 25 4
gpt4 key购买 nike

好的,所以在终端中,在导入并制作必要的对象之后——我输入:

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 项目的目录包含在列表中。

最佳答案

这不是我的答案。我从here得到的,以前对我有帮助。

    from bs4 import BeautifulSoup
import csv

# Create .csv file with headers
f=csv.writer(open("nyccMeetings.csv","w"))
f.writerow(["Name", "Date", "Time", "Location", "Topic"])

# Use python html parser to avoid truncation
htmlContent = open("nyccMeetings.html")
soup = BeautifulSoup(htmlContent,"html.parser")

# Find each row
rows = soup.find_all('tr')
for tr in rows:
cols = tr.find_all('td') # Find each column
try:
names = cols[0].get_text().encode('utf-8')
date = cols[1].get_text().encode('utf-8')
time = cols[2].get_text().encode('utf-8')
location = cols[3].get_text().encode('utf-8')
topic = cols[4].get_text().encode('utf-8')
except:
continue
# Write to .csv file
f.writerow([names, date, time, location, topic])

我认为记录下我在编写此脚本时遇到的一些问题会很有用:

指定你的解析器。指定 BeautifulSoup 将用于通过 html 树形式解析的 html 解析器的类型非常重要。我读入 Python 的 html 文件格式不正确,因此 BeautifulSoup 截断了 html,我只能访问大约四分之一的记录。通过告诉 BeautifulSoup 明确使用内置的 Python html 解析器,我能够避免这个问题并检索所有记录。

编码为 UTF-8。 get_text() 在对 html 标签内的文本进行编码时存在一些问题。因此,我无法将数据写入逗号分隔文件。通过明确告诉程序编码为 UTF-8,我们完全避免了这个问题。

关于python - BeautifulSoup 不会使用 .find_all ('a' 抓取页面中的所有 anchor 标签。我忽略了什么吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21179140/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com