从网站抓取python网站

时间:2019-11-13 18:50:21

标签: python regex web-scraping beautifulsoup

嗨,我使用BeautifulSoup从https://maktabkhooneh.org/plus/捕获{'class':'course-card__title'} 我现在要查找所有( 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)

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

1 个答案:

答案 0 :(得分:0)

我想我不认为您真的要在这里使用正则表达式。您可能想遍历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()将输入内容包装到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']