然后我想用这些url爬取其他我想要的信息,合成一个.csv以方便导入数据库。
在以下的代码里,我只写了几项我想要爬取的内容来测试能否实现(如爬取课程时间表等五项我需要的信息还没有写入代码中),但是在sublime中control+b 之后,虽不报错,但是无法抓取任何内容,只能创建csv文件。
如果能找到漏洞,小弟还有一个问题,就是是不是循环次数太多了,第一层循环就2000层,里面大概每个次级for循环还有10层吧,应该怎么优化呢。。。
求大神指教!thx
***代码如下***#!usr/bin/python# -*- coding:utf-8 -*-import sys;import osimport urllib import requestsimport csvfrom bs4 import beautifulsoupreload(sys);sys.setdefaultencoding(utf8)f = open(all_url.txt,r)lines = f.readlines()for line in lines: html = urllib.urlopen(line) content = html.read() html.close() soup = beautifulsoup(content) all_coursename = soup.find_all('h2', class_=color-primary-text headline-1-text flex-1) coursename = [] for coursename in all_coursename: coursename.append(coursename) all_courseins = soup.find_all(class_=text-light offering-partner-names) courseinstitution = [] for courseins in all_courseins: courseinstitution.append(courseins) all_courseurl = soup.find_all('a', class_=rc-offeringcard nostyle) courseurl = [] for courseurl in all_courseurl: courseurl.append(courseurl) csvfile = file('all_info.csv', 'wb') writer = csv.writer(csvfile) writer.writerow(['course_name', 'course_institution', 'course_url']) for i in range (0,len(coursename)): data = [ (coursename[i], courseinstitution[i], courseurl[i]) ] writer.writerows(data) csvfile.close()
回复内容: 我已经爬取了coursera上所有课程的url,放在了all_url.txt 文件中,大概2000多行。
然后我想用这些url爬取其他我想要的信息,合成一个.csv以方便导入数据库。
在以下的代码里,我只写了几项我想要爬取的内容来测试能否实现(如爬取课程时间表等五项我需要的信息还没有写入代码中),但是在sublime中control+b 之后,虽不报错,但是无法抓取任何内容,只能创建csv文件。
如果能找到漏洞,小弟还有一个问题,就是是不是循环次数太多了,第一层循环就2000层,里面大概每个次级for循环还有10层吧,应该怎么优化呢。。。
求大神指教!thx
***代码如下***#!usr/bin/python# -*- coding:utf-8 -*-import sys;import osimport urllib import requestsimport csvfrom bs4 import beautifulsoupreload(sys);sys.setdefaultencoding(utf8)f = open(all_url.txt,r)lines = f.readlines()for line in lines: html = urllib.urlopen(line) content = html.read() html.close() soup = beautifulsoup(content) all_coursename = soup.find_all('h2', class_=color-primary-text headline-1-text flex-1) coursename = [] for coursename in all_coursename: coursename.append(coursename) all_courseins = soup.find_all(class_=text-light offering-partner-names) courseinstitution = [] for courseins in all_courseins: courseinstitution.append(courseins) all_courseurl = soup.find_all('a', class_=rc-offeringcard nostyle) courseurl = [] for courseurl in all_courseurl: courseurl.append(courseurl) csvfile = file('all_info.csv', 'wb') writer = csv.writer(csvfile) writer.writerow(['course_name', 'course_institution', 'course_url']) for i in range (0,len(coursename)): data = [ (coursename[i], courseinstitution[i], courseurl[i]) ] writer.writerows(data) csvfile.close()
第一层获取url 页面 用thread 模块,后面第二层for的直接extend 列表就好了,最后不要频繁打开关闭文件写入 先把结果存起来 最后一次写入文件
检查一下open mode =wb是怎么定义的
使用'w',文件若存在,首先要清空,然后(重新)创建
一步步调试下,看问题出在哪里,可能从html中筛选出你要的信息出错了或者筛选不出来,都有可能
