拉错了链接。 Beautifulsoup,蟒蛇

问题描述 投票:0回答:2

这是我在这里的第一篇文章所以请耐心等待。

我正试图从我当地的新闻网站上删除所有具有特定单词的链接(城市名称 - 格但斯克)。

问题是,我收到了一些没有城市名称的链接。

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 web-scraping beautifulsoup
2个回答
0
投票

这是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/)

0
投票

您可以尝试使用包含运算符(*)的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'])
© www.soinside.com 2019 - 2024. All rights reserved.