欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

python爬虫问题!在线等解答!

程序员文章站 2022-03-14 13:05:38
...
我已经爬取了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 os
import urllib 
import requests
import csv

from bs4 import BeautifulSoup

reload(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 os
import urllib 
import requests
import csv

from bs4 import BeautifulSoup

reload(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中筛选出你要的信息出错了或者筛选不出来,都有可能