Сканирование веб-страниц с использованием очарования python - PullRequest
0 голосов
/ 15 февраля 2020

[введите описание изображения здесь] [1] Я хотел бы почистить веб-страницу для имени субъекта, и слова находят все слова для слова, которое я решил найти на веб-странице. Мой код пока не работает

import requests
import csv
from bs4 import BeautifulSoup
start_urls = 'https://en.wikipedia.org/wiki/Data_science'
r = requests.get(start_urls)
soup = BeautifulSoup(r.content, 'html.parser')
crawled_page =[]
for page in soup.findAll('data'):
  crawled_page.append(page.get('href'))
print(crawled_page


Errormessage:
C:\Users\tette\PycharmProjects\WebcrawlerProject\venv\Scripts\python.exe 
C:/Users/tette/PycharmProjects/WebcrawlerProject/webScrapy/webScrapy/spiders

/ webcrawler.py []

Process finished with exit code 0

1 Ответ

1 голос
/ 15 февраля 2020

Если вы хотите искать слово в тексте, вам следует использовать

import re

soup.findAll(string=re.compile('data'))

, но он находит строки (NavigableString), а не теги, поэтому вам, возможно, придется получить их родительские для поиска атрибутов, таких как href

import requests
from bs4 import BeautifulSoup, NavigableString
import re

start_urls = 'https://en.wikipedia.org/wiki/Data_science'

r = requests.get(start_urls)

soup = BeautifulSoup(r.content, 'html.parser')
crawled_page =[]
for page in soup.findAll(string=re.compile('data')):
    #print(isinstance(page, NavigableString))
    #print(page.parent)
    href = page.parent.get('href')
    if href: # skip None
        crawled_page.append(href)
print(crawled_page)

РЕДАКТИРОВАТЬ: аналогично lxml с использованием xpath

import requests
import lxml.html
import re

start_urls = 'https://en.wikipedia.org/wiki/Data_science'

r = requests.get(start_urls)

soup = lxml.html.fromstring(r.content)

crawled_page =[]

for page in soup.xpath('//*[contains(text(), "data")]'):
    href = page.attrib.get('href')
    if href: # skip None
        crawled_page.append(href)

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