Как сделать цикл для извлечения текста из гиперссылок на веб-странице - PullRequest
1 голос
/ 05 июля 2019

Я все еще новичок в python и пытаюсь использовать его для веб-скипинга.

В частности, я хочу получить все цитаты на этой странице , которые приведены здесь: "XXX полные кавычки по YYY" или в случае, если есть только одна цитата: "полная цитата по YYY" , После получения текста на каждой странице я хочу сохранить их в виде отдельного текстового файла.

Я следовал этому учебнику , но я немного запутался в том, как фильтровать HTML? Честно говоря, у меня почти нет опыта работы с HTML, поэтому немного сложно понять, что это значит, но я ДУМАЮ, интересующий вас раздел такой:

 <a href="javascript:pop('../2020/

Вот мой код, чтобы открыть веб-страницу.

import bs4
from urllib.request import Request,urlopen as uReq
from bs4 import BeautifulSoup as soup

import re
#define url of interest
my_url = 'http://archive.ontheissues.org/Free_Trade.htm'

# set up known browser user agent for the request to bypass HTMLError
req=Request(my_url,headers={'User-Agent': 'Mozilla/5.0'})

#opening up connection, grabbing the page
uClient = uReq(req)
page_html = uClient.read()
uClient.close()

#html is jumbled at the moment, so call html using soup function

soup = soup(page_html, "html.parser")

Любая помощь очень ценится.

EDIT

Моя идея заключается в том, что я сначала скомпилирую соответствующие URL-адреса и сохраню их, а затем попытаюсь заставить bs сохранить текст в каждом URL-адресе. Мне удалось выделить все интересующие ссылки:

tags = soup.findAll("a" , href=re.compile("javascript:pop"))
print(tags)

for links in tags:
    link = links.get('href')
    if "java" in link: 
        print("http://archive.ontheissues.org" + link[18:len(link)-3])

Теперь, как мне извлечь текст из каждой отдельной ссылки?

Ответы [ 2 ]

1 голос
/ 05 июля 2019

используйте request и regular expression для поиска определенного текста и сохраните текстовое значение в textfile.

import requests
from bs4 import BeautifulSoup
import re
URL = 'http://archive.ontheissues.org/Free_Trade.htm'
headers = {"User-Agent": 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML,like Gecko) Chrome/75.0.3770.100 Safari/537.36' }
page=requests.get(URL, headers=headers)
soup=BeautifulSoup(page.content,'html.parser')
file1 = open("Quotefile.txt","w")
for a in soup.find_all('a',text=re.compile("the full quote by|full quotes by")):
    file1.writelines(a.text.strip() +"\n")
    # print(a.text.strip())
file1.close()

РЕДАКТИРОВАНИЕ:

import requests
from bs4 import BeautifulSoup
import re
URL = 'http://archive.ontheissues.org/Free_Trade.htm'
headers = {"User-Agent": 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML,like Gecko) Chrome/75.0.3770.100 Safari/537.36' }
page=requests.get(URL, headers=headers)
soup=BeautifulSoup(page.content,'html.parser')
file1 = open("Quotefile.txt","w")
for a in soup.find_all('a',href=re.compile("javascript:pop")):
    shref=a['href'].split("'")[1]

    if ('Background_Free_Trade.htm' not in shref):
        link="http://archive.ontheissues.org" + shref[2:len(shref)]
        print(link)

        file1.writelines(a.text.strip() +"\n")

file1.close()

РЕДАКТИРОВАНИЕ2

import requests
from bs4 import BeautifulSoup
import re
URL = 'http://archive.ontheissues.org/Free_Trade.htm'
headers = {"User-Agent": 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML,like Gecko) Chrome/75.0.3770.100 Safari/537.36' }
page=requests.get(URL, headers=headers)
soup=BeautifulSoup(page.content,'html.parser')
file1 = open("Quotefile.txt","w")
for a in soup.find_all('a',href=re.compile("javascript:pop")):
    shref=a['href'].split("'")[1]
    if ('Background_Free_Trade.htm' not in shref):
        link="http://archive.ontheissues.org" + shref[2:len(shref)]
        print(link)
        pagex=requests.get(link,headers=headers)
        soup=BeautifulSoup(pagex.content,'html.parser')
        print(soup.find('h1').text)

        file1.writelines(soup.find('h1').text +"\n")

file1.close()
0 голосов
/ 05 июля 2019

Это то, что вы хотите

soup = soup(page_html, "html.parser")
if (__name__ == '__main__'):
    for tag in soup.find_all('a'): # type: Tag
        if ('href' in tag.attrs and tag.attrs.get('href').startswith("javascript:pop('../2020/")):
            print(tag)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...