我仔细研究了问题/答案,并试图实现以下更改,但都没有效果。
我试图从Coursera的“数据分析”结果( https://www.coursera.org/browse/data-science/data-analysis?languages=en&page=1 )中抓取课程列表中的页面。
有9页,每一页有25门课程,每个课程都有自己的<h2>标签。我发现下面的代码取得了一些成功,但并不是一致的:
courses_data_sci = []
for i in range(10):
page = "https://www.coursera.org/browse/data-science/data-analysis? languages=en&page=" + str(i)
html = urlopen(page)
soup = BeautifulSoup(html.read(), "html.parser")
for meta in soup.find_all('div', {'id' : 'rendered-content'}):
for x in range(26):
try:
course = meta.find_all('h2')[x].text.strip()
courses_data_sci.append(course)
except IndexError:
pass这段代码似乎返回前2-3页的结果和最后一页的结果;有时,如果我在运行courses_data_sci之后再次运行它,它将返回第4页的结果几次。(我在木星工作,我重新启动了内核,以解决任何问题。)
我不知道为什么代码不能正常工作,更不用说为什么返回不一致的结果了。
任何帮助都是非常感谢的。谢谢。
更新
谢谢你的想法.我正在努力利用这两种方法来使代码工作。
出于好奇,我削减了代码,看看它正在收集什么,同时考虑到这两个评论。
courses_data_sci = []
session = requests.Session()
for i in range(10):
page = "https://www.coursera.org/browse/data-science/data-analysis? languages=en&page=" + str(i)
html = urlopen(page)
soup = BeautifulSoup(html.read(), "html.parser")
for meta in soup.find_all('div', {'id' : 'rendered-content'}):
course = meta.find_all('h2')
courses_data_sci.append(course)
# This is to check length of courses_data_sci across pages
print('Page: %s -- total length %s' % (i, len(courses_data_sci)))这实际上会产生一个列表,其中包含了整个9页的所有课程(当然,href信息还没有被删除)。每个循环每页创建一个列表:相应页面上所有课程的列表。因此,当列表被推到列表( courses_data_sci )时,我应该能够去掉这个列表。
每个课程有两个<h2>标记,所以我也认为第二个range()调用:for x in range(26)可能有问题。我尝试了多个不同的范围,其中没有一个工作或返回一个错误,“索引超出范围”。
发布于 2018-05-21 23:19:07
用你的代码我也有同样的行为。
我更改它是为了使用请求:
from bs4 import BeautifulSoup
import requests
courses_data_sci = []
session = requests.Session()
for i in range(10):
page = "https://www.coursera.org/browse/data-science/data-analysis?languages=en&page=" + str(i)
html = session.get(page)
soup = BeautifulSoup(html.text, "html.parser")
for meta in soup.find_all('div', {'id' : 'rendered-content'}):
for x in range(26):
try:
course = meta.find_all('h2')[x].text.strip()
courses_data_sci.append(course)
except IndexError:
pass
# This is to check length of courses_data_sci across pages
print('Page: %s -- total length %s' % (i, len(courses_data_sci)))https://stackoverflow.com/questions/50457043
复制相似问题