首页 > 解决方案 > python 从网站抓取网页

问题描述

嗨,我使用 BeautifulSoup 从https://maktabkhooneh.org/plus/捕获 {'class':'course-card__title'} 我现在想找到所有(THIS)THIS 并打印它我的代码是:

import re
import requests
from bs4 import BeautifulSoup
r = requests.get('https://maktabkhooneh.org/plus/')
soup = BeautifulSoup(r.text, 'html.parser')
results = soup.find_all('div', attrs={'class':'course-card__title'})
print(results)
x = re.findall(r'\<div class=\'course-card__title\'>(\w+)\<\/div\>',results)
print(x)

但我有错误有人可以帮助我吗?

标签: pythonregexweb-scrapingbeautifulsoup

解决方案


我不认为你真的想要这里的正则表达式,我猜。您可能希望遍历results.

测试 1

import re
import requests
from bs4 import BeautifulSoup
r = requests.get('https://maktabkhooneh.org/plus/')
soup = BeautifulSoup(r.text, 'html.parser')
results = soup.find_all('div', attrs={'class': 'course-card__title'})
for item in results:
    print(item.text)

输出 1

آموزش تحلیل داده با زبان برنامه نویسی R (مقدماتی)
IELTS: Listening
آموزش تحليل تكنيكال مقدماتی
آموزش برنامه‌نویسی با پایتون (پیشرفته)
General English: Beginner
Grammar for IELTS
آموزش میکروکنترلر ARM
آموزش پایتون مقدماتی

但如果你这样做,也许你想re.findall()用 a包装你的输入str()

测试 2

import re
import requests
from bs4 import BeautifulSoup
r = requests.get('https://maktabkhooneh.org/plus/')
soup = BeautifulSoup(r.text, 'html.parser')
results = soup.find_all('div', attrs={'class': 'course-card__title'})
for item in results:
    x = re.findall(
        r'<div class="course-card__title">([^<]*)</div>', str(item))
    print(x)

输出 2

['آموزش تحلیل داده با زبان برنامه نویسی R (مقدماتی)']
['IELTS: Listening']
['آموزش تحليل تكنيكال مقدماتی']
['آموزش برنامه\u200cنویسی با پایتون (پیشرفته)']
['General English: Beginner']
['Grammar for IELTS']

推荐阅读