首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Python 3进行网络抓取

使用Python 3进行网络抓取
EN

Stack Overflow用户
提问于 2019-10-31 08:32:41
回答 5查看 105关注 0票数 1

在抓取一个网站后,我已经检索到了所有的html链接。在将它们设置为set()之后,为了删除任何重复项,我仍在检索某些值。如何从链接集中删除'#','#content',‘#uscb nav-skip-header’,'/',None的值。

代码语言:javascript
复制
from bs4 import BeautifulSoup
import urllib
import re

#Gets the html code for scrapping
r = urllib.request.urlopen('https://www.census.gov/programs-surveys/popest.html').read()

#Creates a beautifulsoup object to run
soup = BeautifulSoup(r, 'html.parser')

#Set removes duplicates
lst2 = set()
for link in soup.find_all('a'):
    lst2.add(link.get('href'))
lst2

{'#',
 '#content',
 '#uscb-nav-skip-header',
 '/',
 '/data/tables/time-series/demo/popest/pre-1980-county.html',
 '/data/tables/time-series/demo/popest/pre-1980-national.html',
 '/data/tables/time-series/demo/popest/pre-1980-state.html',
 '/en.html',
 '/library/publications/2010/demo/p25-1138.html',
 '/library/publications/2010/demo/p25-1139.html',
 '/library/publications/2015/demo/p25-1142.html',
 '/programs-surveys/popest/data.html',
 '/programs-surveys/popest/data/tables.html',
 '/programs-surveys/popest/geographies.html',
 '/programs-surveys/popest/guidance-geographies.html',
 None,
 'https://twitter.com/uscensusbureau',
 ...}
EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2019-10-31 08:39:29

URL中的字符# (及其后面的所有内容)与浏览器相关,但在发出web请求时与服务器无关,因此将这些部分从URL中去掉是很好的。这将保留'#content'之类的URL为空,但也会将'/about#contact'更改为'/about',这实际上正是您想要的。然后,我们只需要一条if语句来将非空字符串添加到集合中。这也会同时过滤掉None

代码语言:javascript
复制
lst2 = set()
for link in soup.find_all('a'):
    url = link.get('href')
    url = url.split('#')[0]
    if url:
        lst2.add(url)

如果您特别想要排除'/' (尽管它是一个有效的URL),您可以简单地在末尾编写lst2.discard('/')。由于lst2是一个集合,如果它在那里,这将删除它,如果它不在,则什么也不做。

票数 2
EN

Stack Overflow用户

发布于 2019-10-31 08:37:51

您可以遍历集合并使用regex过滤集合中的每个元素。对于None,您可以简单地检查该值是否为None。

票数 0
EN

Stack Overflow用户

发布于 2019-10-31 08:38:27

尝试执行以下操作:

代码语言:javascript
复制
set(link.get('href') for link in soup.findAll(name='link') if link.has_attr("href"))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58635425

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档