美文网首页
Python小白的爬虫问题与解决(含代码)

Python小白的爬虫问题与解决(含代码)

作者: 大力SAMA | 来源:发表于2018-05-10 15:05 被阅读0次

因为上一篇文章没办法放代码,所以重新发一次

2018/5/7
看到作者发的代码很简单,嗯,适合我这个新手+懒人!但是,问题没有那么简单!
原文地址:https://www.jianshu.com/p/ea0b56e3bd86

抓取1页影评,print内容出错 抓取结果编码出错,存在score未取到的情况

Python版本:2.7.13

2018/5/8

print同时打印2个结果时,文字编码错误 print结果参考,求大神告知原因 获取用户名代码,xpath内容待学习 测试结果OK 打印全部内容 打印结果OK

5/9

查看列表元素的类型 评分获取代码 源代码 代码运行结果,先获取class属性存储为字符串,取字符串的第8位即所需评分 列表内容获取正常 尝试写入CSV出错,发现name中既有Unicode又有str,绝望!!

参考前辈经验后,编码问题得到改善。

链接:https://blog.csdn.net/gyafdxis/article/details/77923516

文字能够正常显示,但是不在同一个单元格 万能百度:.writerow()和writerows()写入的是list类型,把单个数据变成[]就行。 刚开心一会,又碰到了问题!!我要换Python3(;´д`)ゞ

参考了这位大神(https://www.jianshu.com/p/d1bf2f0bdc51)对数据的存储方法,终于成功了!!

3个元素作为一个列表存储到大列表中 将列表中的数据依次写入CSV 终于成功啦!撒花!

5/10

今日任务:把代码改为函数

这一段代码导致程序运行无结果,连print都不行,只能重新处理编码问题 在经历了无数次报错,无数次百度后终于找到了问题的关键 把数据统一为‘str’类,最终运行成功 运行中Tqdm出现警告,不知道什么原因,不过对结果没有影响

最后修改完成的代码

import requests
from lxml import etree
import pandas as pd
import time
import random
from tqdm import tqdm
import csv
import codecs
'''
import sys

reload(sys)
sys.setdefaultencoding('utf8')
'''
data = []

def getyp(page):
    url = 'https://movie.douban.com/subject/6390825/comments?start=%d&limit=20&sort=new_score&status=P&percent_type='%(page*20)
    response = requests.get(url)
    response.encoding = 'utf-8'
    #print (response.content)
    response = etree.HTML(response.content)

    print (url)

    for i in range(1,21):#每页显示20条评论

        name1 = response.xpath('//*[@id="comments"]/div[%d]/div[2]/h3/span[2]/a'%(i))#获取用户名,保存为列表形式,每次循环,name1中都只有一个元素
        score1 = response.xpath('//*[@id="comments"]/div[%d]/div[2]/h3/span[2]/span[2]'%(i))#获取评分
        comment1 = response.xpath('//*[@id="comments"]/div[%d]/div[2]/p'%(i))#获取影评

    
        if type(name1[0].text) == unicode:
            name_element = name1[0].text.encode('utf-8')
        else:
            name_element = name1[0].text

    
        score_element = score1[0].attrib['class'][7]#获取class属性,取第8个字符
    
    
        if type(comment1[0].text) == unicode:
            comment_element = comment1[0].text.encode('utf-8')
        else:
            comment_element = comment1[0].text
            print type(comment_element)

        data.append([name_element,score_element,comment_element])



for i in tqdm(range(1,3)):#抓取2页
    getyp(i)
    time.sleep(random.uniform(6,9))


with open("DBtest.csv","wb") as f:
    f.write(codecs.BOM_UTF8)
    writer = csv.writer(f)
    writer.writerow(['name','score','comment'])
    for k in data:
        writer.writerow(k)

相关文章

网友评论

      本文标题:Python小白的爬虫问题与解决(含代码)

      本文链接:https://www.haomeiwen.com/subject/sbgzrftx.html