这是我在这里的第一篇文章所以请耐心等待。
我正试图从我当地的新闻网站上删除所有具有特定单词的链接(城市名称 - 格但斯克)。
问题是,我收到了一些没有城市名称的链接。
import requests
from fake_useragent import UserAgent
from bs4 import BeautifulSoup
import lxml
import re
url = 'http://www.trojmiasto.pl'
nazwa_pliku = 'testowyplik.txt'
user_agent = UserAgent()
strona = requests.get(url,headers={'user-agent':user_agent.chrome})
with open(nazwa_pliku,'w') as plik:
plik.write(page.content.decode('utf-8')) if type(page.content) == bytes else file.write(page.content)
def czytaj():
plikk = open('testowyplik.txt')
data = plikk.read()
plikk.close()
return data
soup = BeautifulSoup(czytaj(),'lxml')
linki = [li.div.a for div in soup.find_all('div',class_='entry-letter')]
for lin in linki:
print(lin)
rezultaty = soup.find_all('a',string=re.compile("Gdańsk"))
print(rezultaty)
l=[]
s=[]
for tag in rezultaty:
l.append(tag.get('href'))
s.append(tag.text)
for i in range(len(s)):
print('url = '+l[i])
print('\n')
这是Python 3中一个完整而简单的示例:
import requests
from bs4 import BeautifulSoup
city_name = 'Gdańsk'
url = 'http://www.trojmiasto.pl'
headers = {
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36'
}
with requests.get(url, headers=headers) as html:
if html.ok:
soup = BeautifulSoup(html.content, 'html.parser')
links = soup('a')
for link in links:
if city_name in link.text:
print('\t- (%s)[%s]' % (link.text, link.get('href')))
以下是上述代码的输出(格式为Markdown只是为了清晰起见):
- [ZTM Gdańsk](//ztm.trojmiasto.pl/)
- [ZTM Gdańsk](https://ztm.trojmiasto.pl/)
- [Polepsz Gdańsk i złóż projekt do BO](https://www.trojmiasto.pl/wiadomosci/Polepsz-Gdansk-i-zloz-projekt-do-BO-n132827.html)
- [Pomnik Pileckiego stanie w Gdańsku](https://www.trojmiasto.pl/wiadomosci/Pomnik-rotmistrza-Witolda-Pileckiego-jednak-stanie-w-Gdansku-n132806.html)
- [O Włochu, który pokochał Gdańsk](https://rozrywka.trojmiasto.pl/Roberto-M-Polce-Polacy-maja-w-sobie-cos-srodziemnomorskiego-n132686.html)
- [Plakaty z poezją na ulicach Gdańska](https://kultura.trojmiasto.pl/Plakaty-z-poezja-na-ulicach-Gdanska-n132696.html)
- [Uniwersytet Gdański skończył 49 lat](https://nauka.trojmiasto.pl/Uniwersytet-Gdanski-skonczyl-50-lat-n132797.html)
- [Zapisz się na Półmaraton Gdańsk](https://aktywne.trojmiasto.pl/Zapisz-sie-na-AmberExpo-Polmaraton-Gdansk-2019-n132785.html)
- [Groźby na witrynach barów w Gdańsku](https://www.trojmiasto.pl/wiadomosci/Celtyckie-krzyze-i-grozby-na-witrynach-barow-w-Gdansku-n132712.html)
- [Stadion Energa Gdańsk](https://www.trojmiasto.pl/Stadion-Energa-Gdansk-o25320.html)
- [Gdańsk Big Beat Day 2019 ](https://www.trojmiasto.pl/rd/?t=p&id_polecamy=59233&url=https%3A%2F%2Fimprezy.trojmiasto.pl%2FGdansk-Big-Beat-Day-2019-imp475899.html&hash=150ce9c9)
- [ZTM Gdańsk](https://ztm.trojmiasto.pl/)
您可以尝试使用包含运算符(*)的attribute = value
rezultaty = [item['href'] for item in soup.select("[href*='Gdansk']")]
完整的脚本
import requests
from bs4 import BeautifulSoup as bs
r = requests.get('http://www.trojmiasto.pl')
soup = bs(r.content, 'lxml')
rezultaty = [item['href'] for item in soup.select("[href*='Gdansk']")]
print(rezultaty)
没有列表理解:
for item in soup.select("[href*='Gdansk']"):
print(item['href'])