如何删除空行和从“/publications”开始的行?
how I can delete empty lines and lines starting from '/publications'?
我的代码:
import requests
from bs4 import BeautifulSoup
request = requests.get("https://news.google.com/topics/CAAqRggKIkBDQklTS2pvUVkyOTJhV1JmZEdWNGRGOXhkV1Z5ZVlJQkZRb0lMMjB2TURKcU56RVNDUzl0THpBeFkzQjVlU2dBUAE/sections/CAQqSggAKkYICiJAQ0JJU0tqb1FZMjkyYVdSZmRHVjRkRjl4ZFdWeWVZSUJGUW9JTDIwdk1ESnFOekVTQ1M5dEx6QXhZM0I1ZVNnQVAB?hl=en-US&gl=US&ceid=US%3Aen")
content = BeautifulSoup(request.content, 'html.parser')
find = content.find('div', class_='ajwQHc BL5WZb')
#open('test.html', 'w').write(findstr.find)
h3 = find.find_all('h3')
time = find.find_all('time')
link = find.find_all('article')#.find_all('a').get('href').replace('.', '')
result = []
#print('https://news.google.com' + link)
for result in link:
alinks = result.find_all('a')
alinks1 = []
for alinks1 in alinks:
alinks2 = alinks1.get('href')
alinksreplace = str(alinks2)
alinksreplace1 = alinksreplace.replace(".", "")
alinksreplace2 = alinksreplace1.replace("None", "")
print(alinksreplace2)[![enter image description here]
我想删除以 /publications:
开头的空行和链接
我试了很多方法都不行
/articles/CBMinQFodHRwczovL3d3dy5rcHZpLmNvbS9uZXdzL25hdGlvbmFsX25ld3MvZGFpbHktd3lvbWluZy1jb3JvbmF2aXJ1cy11cGRhdGUtNDA0LW5ldy1jYXNlcy0xLTAxNi1uZXctcmVjb3Zlcmllcy9hcnRpY2xlX2JlZmMxN2MyLTI1NGYtNTQxOS1hOGIwLTIyYmUwNjNlY2NhYi5odG1s0gEA?hl=en-US&gl=US&ceid=US%3Aen
/publications/CAAqBwgKMInn9gowidnVAg?hl=en-US&gl=US&ceid=US%3Aen
这里有很多事情要做。让我们先来了解一下你的误解
result = []
for result in link:
#...
和
alinks1 = []
for alinks1 in alinks:
#...
你一直在 for 循环之前不必要地和错误地实例化变量。 alinks1
或 result
都不是列表,除非 RSE(右侧表达式)中的 returns 是列表。最好假设您不知道会返回什么,并且不管它是什么就接受它。
alinks2 = alinks1.get('href')
alinksreplace = str(alinks2)
alinksreplace1 = alinksreplace.replace(".", "")
alinksreplace2 = alinksreplace1.replace("None", "")
这很快就会变得荒谬和麻烦。如果您需要对数据进行如此多的格式化,您应该使用正则表达式。
下面是经过大量重新格式化的代码版本,其中举例说明了您要执行的操作。主要部分并不简单。
import requests, re
from bs4 import BeautifulSoup
REP = re.compile(r'None|\n|publications/|\.') #content to remove
req = requests.get("https://news.google.com/topics/CAAqRggKIkBDQklTS2pvUVkyOTJhV1JmZEdWNGRGOXhkV1Z5ZVlJQkZRb0lMMjB2TURKcU56RVNDUzl0THpBeFkzQjVlU2dBUAE/sections/CAQqSggAKkYICiJAQ0JJU0tqb1FZMjkyYVdSZmRHVjRkRjl4ZFdWeWVZSUJGUW9JTDIwdk1ESnFOekVTQ1M5dEx6QXhZM0I1ZVNnQVAB?hl=en-US&gl=US&ceid=US%3Aen")
if find := BeautifulSoup(req.content, 'html.parser').find('div', class_='ajwQHc BL5WZb'):
links = list(filter(lambda a: bool(a), [REP.sub('', str(link.get('href'))) for result in find.find_all('article') for link in result.find_all('a')]))
print(*links, sep='\n')
else:
print('No content was found.')
主要需要注意的是这部分主线:
list(filter(lambda a: bool(a), [REP.sub('', str(link.get('href')))
从右往左理解。首先我们得到 link,但为了捕获 None
,将它转换为字符串(无论如何)。然后通过替换regex
处理该值。然后我们将结果转储到 filter
中,这样我们就可以跳过所有出现的 ''
,最后将其转换为 list
,这可能是必要的,也可能不是实际需要的……这取决于根据您的技能和需求。
我的代码:
import requests
from bs4 import BeautifulSoup
request = requests.get("https://news.google.com/topics/CAAqRggKIkBDQklTS2pvUVkyOTJhV1JmZEdWNGRGOXhkV1Z5ZVlJQkZRb0lMMjB2TURKcU56RVNDUzl0THpBeFkzQjVlU2dBUAE/sections/CAQqSggAKkYICiJAQ0JJU0tqb1FZMjkyYVdSZmRHVjRkRjl4ZFdWeWVZSUJGUW9JTDIwdk1ESnFOekVTQ1M5dEx6QXhZM0I1ZVNnQVAB?hl=en-US&gl=US&ceid=US%3Aen")
content = BeautifulSoup(request.content, 'html.parser')
find = content.find('div', class_='ajwQHc BL5WZb')
#open('test.html', 'w').write(findstr.find)
h3 = find.find_all('h3')
time = find.find_all('time')
link = find.find_all('article')#.find_all('a').get('href').replace('.', '')
result = []
#print('https://news.google.com' + link)
for result in link:
alinks = result.find_all('a')
alinks1 = []
for alinks1 in alinks:
alinks2 = alinks1.get('href')
alinksreplace = str(alinks2)
alinksreplace1 = alinksreplace.replace(".", "")
alinksreplace2 = alinksreplace1.replace("None", "")
print(alinksreplace2)[![enter image description here]
我想删除以 /publications:
开头的空行和链接我试了很多方法都不行
/articles/CBMinQFodHRwczovL3d3dy5rcHZpLmNvbS9uZXdzL25hdGlvbmFsX25ld3MvZGFpbHktd3lvbWluZy1jb3JvbmF2aXJ1cy11cGRhdGUtNDA0LW5ldy1jYXNlcy0xLTAxNi1uZXctcmVjb3Zlcmllcy9hcnRpY2xlX2JlZmMxN2MyLTI1NGYtNTQxOS1hOGIwLTIyYmUwNjNlY2NhYi5odG1s0gEA?hl=en-US&gl=US&ceid=US%3Aen
/publications/CAAqBwgKMInn9gowidnVAg?hl=en-US&gl=US&ceid=US%3Aen
这里有很多事情要做。让我们先来了解一下你的误解
result = []
for result in link:
#...
和
alinks1 = []
for alinks1 in alinks:
#...
你一直在 for 循环之前不必要地和错误地实例化变量。 alinks1
或 result
都不是列表,除非 RSE(右侧表达式)中的 returns 是列表。最好假设您不知道会返回什么,并且不管它是什么就接受它。
alinks2 = alinks1.get('href')
alinksreplace = str(alinks2)
alinksreplace1 = alinksreplace.replace(".", "")
alinksreplace2 = alinksreplace1.replace("None", "")
这很快就会变得荒谬和麻烦。如果您需要对数据进行如此多的格式化,您应该使用正则表达式。
下面是经过大量重新格式化的代码版本,其中举例说明了您要执行的操作。主要部分并不简单。
import requests, re
from bs4 import BeautifulSoup
REP = re.compile(r'None|\n|publications/|\.') #content to remove
req = requests.get("https://news.google.com/topics/CAAqRggKIkBDQklTS2pvUVkyOTJhV1JmZEdWNGRGOXhkV1Z5ZVlJQkZRb0lMMjB2TURKcU56RVNDUzl0THpBeFkzQjVlU2dBUAE/sections/CAQqSggAKkYICiJAQ0JJU0tqb1FZMjkyYVdSZmRHVjRkRjl4ZFdWeWVZSUJGUW9JTDIwdk1ESnFOekVTQ1M5dEx6QXhZM0I1ZVNnQVAB?hl=en-US&gl=US&ceid=US%3Aen")
if find := BeautifulSoup(req.content, 'html.parser').find('div', class_='ajwQHc BL5WZb'):
links = list(filter(lambda a: bool(a), [REP.sub('', str(link.get('href'))) for result in find.find_all('article') for link in result.find_all('a')]))
print(*links, sep='\n')
else:
print('No content was found.')
主要需要注意的是这部分主线:
list(filter(lambda a: bool(a), [REP.sub('', str(link.get('href')))
从右往左理解。首先我们得到 link,但为了捕获 None
,将它转换为字符串(无论如何)。然后通过替换regex
处理该值。然后我们将结果转储到 filter
中,这样我们就可以跳过所有出现的 ''
,最后将其转换为 list
,这可能是必要的,也可能不是实际需要的……这取决于根据您的技能和需求。