鱼C论坛

 找回密码
 立即注册
查看: 2790|回复: 5

我应该怎样把我抓取到的东西保存到本地

[复制链接]
发表于 2017-5-18 14:21:26 | 显示全部楼层 |阅读模式

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

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

x
# -*- coding: utf-8 -*-
import re
import urllib.request
import urllib
import os
from collections import deque




#使用队列存放url
queue = deque()
#使用visited防止重复爬同一页面
visited = set()

url = 'http://www.qichongwang.com'  # 入口页面, 可以换成别的
 #入队最初的页面
queue.append(url)
cnt = 0

while queue:
  url = queue.popleft()  # 队首元素出队
  visited |= {url}  # 标记为已访问

  print('已经抓取: ' + str(cnt) + '   正在抓取 <---  ' + url)
  cnt += 1

  try:
      #抓取页面
      urlop = urllib.request.urlopen(url,timeout=10)
  except Exception:
      print("超时")
      continue
  #判断是否为html页面
  if 'html' not in urlop.getheader('Content-Type'):
    continue

  # 避免程序异常中止, 用try..catch处理异常
  try:
   #转换为utf-8码
    data = urlop.read().decode('utf-8')
  except:
    continue

  # 正则表达式提取页面中所有队列, 并判断是否已经访问过, 然后加入待爬队列
  linkre = re.compile("href=['"]([^"'>]*?)['"].*?")
  for x in linkre.findall(data):##返回所有有匹配的列表
    if 'http' in x and x not in visited:##判断是否为http协议链接,并判断是否抓取过
      queue.append(x)

f = open(r'E:\sitemap.txt', 'wb')
f.write(url)
f.close()
大家帮忙开一下代码哪里有问题
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-5-18 14:49:58 | 显示全部楼层
你要保存什么呀?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-5-18 15:02:29 | 显示全部楼层
zxszx4 发表于 2017-5-18 14:49
你要保存什么呀?

我要保存我抓取过来的所有URL
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-5-18 15:42:10 | 显示全部楼层
不明白你程序的表达
如果是保存文件
#一次性写入
with open(文件路径,'w') as f:
    f.write(你要写进去的东西)
#增加写入
with open(文件路径,'a') as f:
    f.write(你要写进去的东西)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-5-18 15:47:32 | 显示全部楼层
刘英超 发表于 2017-5-18 15:02
我要保存我抓取过来的所有URL

我还是没太搞懂
首先你打开文件是二进制的,却要把字符串写进去,格式不对吧
其次你的url最开始赋值了,一直没变,写的还是一开始赋值的
最后你的队列是排队的,最后的值都取出来的你写什么?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-22 16:25

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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