Я хочу ссылки и весь контент из каждой ссылки - PullRequest
1 голос
/ 25 марта 2019

Я искал ключевое слово (кибербезопасность) на веб-сайте газеты, и результаты показали около 10 статей.Я хочу, чтобы мой код захватил ссылку и пошел по этой ссылке, получил всю статью и повторил это для всех 10 статей на странице.(Я не хочу резюме, я хочу всю статью)

import urllib.request
import ssl
import time
from bs4 import BeautifulSoup

ssl._create_default_https_context = ssl._create_unverified_context
pages = [1]
for page in pages:
    data = urllib.request.urlopen("https://www.japantimes.co.jp/tag/cybersecurity/page/{}".format(page))
    soup = BeautifulSoup(data, 'html.parser')

    for article in soup.find_all('div', class_="content_col"):
        link = article.p.find('a')
        print(link.attrs['href'])

        for link in links:
            headline = link.h1.find('div', class_= "padding_block")
            headline = headline.text
            print(headline)
            content = link.p.find_all('div', class_= "entry")
            content = content.text
            print(content)

            print()

        time.sleep(3)

Это не работает.

date = link.li.find('time', class_= "post_time")

Отображение ошибки:

AttributeError: у объекта 'NoneType' нет атрибута 'find'

Этот код работает и захватывает все ссылки на статьи.Я хочу включить код, который будет добавлять заголовок и контент из каждой ссылки на статью.

import urllib.request
import ssl
import time
from bs4 import BeautifulSoup

ssl._create_default_https_context = ssl._create_unverified_context
pages = [1]
for page in pages:

    data = urllib.request.urlopen("https://www.japantimes.co.jp/tag/cybersecurity/page/{}".format(page))

    soup = BeautifulSoup(data, 'html.parser')

    for article in soup.find_all('div', class_="content_col"):
        link = article.p.find('a')
        print(link.attrs['href'])
        print()
        time.sleep(3)

1 Ответ

2 голосов
/ 25 марта 2019

Попробуйте следующий скрипт.Это принесет вам все названия вместе с их содержанием.Укажите наибольшее количество страниц, которые вы хотите просмотреть.

import requests
from bs4 import BeautifulSoup

url = 'https://www.japantimes.co.jp/tag/cybersecurity/page/{}'

pages = 4

for page in range(1,pages+1):
    res = requests.get(url.format(page))
    soup = BeautifulSoup(res.text,"lxml")
    for item in soup.select(".content_col header p > a"):
        resp = requests.get(item.get("href"))
        sauce = BeautifulSoup(resp.text,"lxml")
        title = sauce.select_one("header h1").text
        content = [elem.text for elem in sauce.select("#jtarticle p")]
        print(f'{title}\n{content}\n')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...