鱼C论坛

 找回密码
 立即注册
查看: 716|回复: 6

爬虫的数据中存储到csv文件时出错

[复制链接]
发表于 2018-8-13 18:05:30 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
爬的时新浪网的新闻,但存储到csv格式中出错了吗,求大神
  1. import requests
  2. import re
  3. import json
  4. import pandas
  5. from requests.exceptions import RequestException
  6. from bs4 import BeautifulSoup

  7. def parse_comments_news(url):
  8.     commentsurl='http://comment5.news.sina.com.cn/page/info?version=1&format=json&channel=gn&newsid=comos-{}&group=undefined&compress=0&ie=utf-8&oe=utf-8&page=1&page_size=3'#尝试
  9.     pattern=re.search('doc-i(.*?).shtml',url)
  10.     newsid=pattern.group(1)
  11.     headers={
  12.              'User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36'
  13.     }
  14.     try:
  15.         response=requests.get(commentsurl.format(newsid),headers=headers)
  16.         if response.status_code==200:
  17.             return json.loads(response.text)['result']['count']['total']#是一个字典的格式
  18.         return None
  19.     except RequestException:
  20.         print('请求评论错误')
  21.         return None

  22. def parse_page_news(url):
  23.     headers={
  24.              'User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36'
  25.     }
  26.     try:
  27.         response=requests.get(url,headers=headers)
  28.         response.encoding='utf-8'
  29.         if response.status_code==200:
  30.             soup = BeautifulSoup(response.text, 'lxml')
  31.             result = {}
  32.             result['title'] = soup.select('.main-title')[0].text
  33.             result['source'] = soup.select('.source')[0].text
  34.             result['date'] = soup.select('.date')[0].text
  35.             if soup.select('.show_author')[0].text.strip()[5:]:
  36.                 result['author'] = soup.select('.show_author')[0].text.strip()[5:]
  37.             items = soup.select('#article p')
  38.             del items[-1]  # 删除列表中最后一个元素
  39.             result['content'] = '\n'.join([item.text.replace('\u3000\u3000', '').replace('\xa0 ', '\n') for item in items])
  40.             result['comments'] = parse_comments_news(url)
  41.             return result
  42.         return None
  43.     except RequestException:
  44.         print('请求网页错误')
  45.         return None

  46. def parse_List_Links(list_url):
  47.     newsdetail=[]
  48.     response=requests.get(list_url)
  49.     if response.status_code==200:
  50.         jd=json.loads(response.text.lstrip('  newsloadercallback(').rstrip(');'))#json类型的字符串变成字典的格式
  51.         for item in jd['result']['data']:
  52.             newsdetail.append(parse_page_news(item['url']))
  53.         return newsdetail
  54.     return None

  55. def write_to_csv(content):
  56.     df = pandas.DataFrame(content)
  57.     print(df)
  58.     df.to_csv(r'C:\Users\lenovo\Desktop\爬虫\新闻\国内新闻.csv', 'r',encoding='gbk')


  59. def main(page):
  60.     url='http://news.sina.com.cn/o/2018-08-10/doc-ihhnunsq7748786.shtml'
  61.     list_url='http://api.roll.news.sina.com.cn/zt_list?channel=news&cat_1=gnxw&cat_2==gdxw1||=gatxw||=zs-pl||=mtjj&level==1||=2&show_ext=1&show_all=1&show_num=22&tag=1&format=json&page='+str(page)+'&callback=newsloadercallback'
  62.     news_total = []
  63.     newsurl = list_url.format(page)
  64.     newary = parse_List_Links(newsurl)
  65.     news_total.extend(newary)
  66.     write_to_csv(news_total)

  67. if __name__=='__main__':
  68.     for i in range(10):
  69.         main(page=i)
复制代码



出现的错误是          UnicodeEncodeError: 'gbk' codec can't encode character '\xa0' in position 95: illegal multibyte sequence
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-8-13 18:16:38 | 显示全部楼层
试试utf8:
  1. df.to_csv(r'C:\Users\lenovo\Desktop\爬虫\新闻\国内新闻.csv', 'r',encoding='utf_8_sig')
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-8-13 18:21:26 | 显示全部楼层
62 行 encoding = 'gbk' 换成 encoding = 'utf-8' 试试
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-8-13 18:30:07 | 显示全部楼层

可以了,但写入的时候序号是从1-22,然后又是1-22.....重复不断的,怎么回事
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-8-13 18:36:50 | 显示全部楼层
我猜是这里的问题吧?循环了10次:
  1. for i in range(10):
  2.         main(page=i)
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-8-13 19:03:49 | 显示全部楼层
无符号整形 发表于 2018-8-13 18:36
我猜是这里的问题吧?循环了10次:

序号是重复的,但内容不一样
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-8-13 19:08:08 | 显示全部楼层
chunguang 发表于 2018-8-13 19:03
序号是重复的,但内容不一样

正常啊,0~9页嘛。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-26 05:04

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表