Я пытаюсь вычеркнуть названия из PDF-файлов на этом сайте. Тем не менее, я получаю названия и ссылки. Почему и как я могу это исправить? - PullRequest
0 голосов
/ 03 октября 2019

Я хочу почистить названия PDF-файлов на этом сайте. Тем не менее, я получаю названия и ссылки. Как я могу это исправить?

publications=[]
text=[]
for i in np.arange(12,19):
    response=requests.get('https://occ.ca/our- 
 publications/page/{}/'.format(i), headers={'User-Agent': 'Mozilla'})

if response.status_code == 200:
    soup = BeautifulSoup(response.text, 'lxml')
    pdfs = soup.findAll('div', {"class": "publicationoverlay"})

    links = [pdf.find('a').attrs['href'] for pdf in pdfs]
    publications.extend(links)
    text.extend(pdfs)

Любая помощь будет высоко ценится.

1 Ответ

1 голос
/ 03 октября 2019

Вы хотите, чтобы .text хотя и было разделено на \t (чтобы исключить дочерний a текст) и полосу. Я использую Session для эффективности.

import requests
from bs4 import BeautifulSoup 
import numpy as np

publications=[]
text=[]

with requests.Session() as s:

    for i in np.arange(12,19):

        response= s.get('https://occ.ca/our-publications/page/{}/'.format(i), headers={'User-Agent': 'Mozilla'})

        if response.status_code == 200:
            soup = BeautifulSoup(response.text, 'lxml')
            pdfs = soup.findAll('div', {"class": "publicationoverlay"})
            text.extend([pdf.text.strip().split('\t')[0] for pdf in pdfs])

Вы также можете использовать декомпозицию для удаления дочерних тегов после получения href и перед получением .text родительского

import requests
from bs4 import BeautifulSoup 
import numpy as np

publications=[]
text=[]
links = []

with requests.Session() as s:

    for i in np.arange(12,19):

        response= s.get('https://occ.ca/our-publications/page/{}/'.format(i), headers={'User-Agent': 'Mozilla'})

        if response.status_code == 200:
            soup = BeautifulSoup(response.text, 'lxml')
            for a in soup.select('.publicationoverlay a'):
                links.extend([a['href']])
                a.decompose()
            pdfs = soup.findAll('div', {"class": "publicationoverlay"})
            text.extend([pdf.text.strip() for pdf in pdfs])

print(list(zip(links, text)))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...