当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 8 篇帖子 ] 
作者 内容
1 楼 
 文章标题 : 我的Python爬虫为什么抓取一个失败一个?
帖子发表于 : 2010-10-10 7:23 
头像

注册: 2010-05-05 14:24
帖子: 132
送出感谢: 0 次
接收感谢: 0 次
如题:我的Python爬虫为什么抓取一个失败一个?

如下:
全部是成功抓取一个失败一个。
我开始以为是进程并发多了,于是设置成2个进程。
问题还是这样。
我单个测试的时候,并发只有到了8个进程才会出现有抓取不上的问题。不知道这个怎么回事了。
希望大牛指点。:))

:em01 :em01 :em01

代码:
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
Milk Hall Vol 3 (Ako Makino)
----------------------------------------------------------------------------------
['Asian', 'JAV', 'Oriental Dream', 'Teen']
['Ako Makino', 'Milk Hall']
正在提取 6948 内容........
***************************
404错误...无法链接URL. : http://*****/?p=8815
***************************
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
First Class 2 (Mai Ebihara)
----------------------------------------------------------------------------------
['Asian', 'JAV', 'Teen', 'Tsubaki House']
['First Class', 'Mai Ebihara', '\xe8\x9b\xaf\xe5\x8e\x9f\xe8\x88\x9e']
正在提取 8674 内容........
***************************
404错误...无法链接URL. : http://****/?p=6948
***************************
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
Red Hot Fetish Vol 54 (Asaka Minami)
----------------------------------------------------------------------------------
['Asian', 'Fetish', 'JAV', 'Red Hot Fetish', 'Teen']
['Asaka Minami', 'Red Hot Fetish', '\xe6\x9c\x9d\xe9\xa6\x99\xe5\x8d\x97']
正在提取 8644 内容........
***************************
404错误...无法链接URL. : http://*****/?p=8674
***************************
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
Cattleya
----------------------------------------------------------------------------------
['Asian', 'JAV', 'Pork Terriyaki', 'Squirt', 'Studio Terriyaki', 'Teen']
['Cattleya', 'Pork Teriyaki', '\xe5\x8a\xa0\xe6\x96\x97\xe3\x83\xac\xe3\x82\xa2']
正在提取 8536 内容........
***************************
404错误...无法链接URL. : http://*****/?p=8644
***************************





---------------------------
我这个判断 错误和404是在页面寻找是否有 :“Not Found”和 "404 Error"文字。但是我手工上去看 网页的源码,发现网页都是正常的,为什么这个 Error 404会报错呢?
:em01 :em01


_________________
小博客,欢迎光临!http://zhonghe.co.de
有一种被人抛诸脑后的过去,包含一些不该遗忘的点点滴滴。欢笑之余,我将故旧拾起,才刹见自己的薄情。人世间似乎存在着某种公平,每个人都曾被抛掷在他人的遗忘中;而今你所有哽咽难宣的话语,也正是你曾为人所期盼,却永远听不见的字句。” —赫曼 赫塞


页首
 用户资料  
 
2 楼 
 文章标题 : Re: 我的Python爬虫为什么抓取一个失败一个?
帖子发表于 : 2010-10-10 8:52 

注册: 2008-01-09 22:41
帖子: 18311
送出感谢: 0 次
接收感谢: 6
木有代码,空有log,ee也不行的


页首
 用户资料  
 
3 楼 
 文章标题 : Re: 我的Python爬虫为什么抓取一个失败一个?
帖子发表于 : 2010-10-10 8:58 
头像

注册: 2010-05-05 14:24
帖子: 132
送出感谢: 0 次
接收感谢: 0 次
代码:

#!/usr/bin/env python
#coding: utf8


import re
import urllib,urllib2
import time
import os,sys

from threading import Thread
from Queue import Queue

q = Queue()
MAXC = 2
error = 'Not Found'
#Error 404

def work():
   while True:
      id = q.get()
      fetch(id)
      q.task_done()


def download(url):
   res = urllib2.urlopen(url).read()
   if error or 'Error 404' in res:
      print '***************************'
      print '404错误...无法链接URL. :'
      print url
      print '***************************'
      title = re.compile(r'<title>(.*?)</title>',re.DOTALL).findall(res)[0]
                #记录抓取失败的ID
      open('error' , 'a').write(url+'  --'+title+'--''\n')
      return res
def feed():
   url = 'http://.........../feed/'
   res = download(url)
   postid = re.compile(r'http...。。。。/.p=(\d+)</guid>',re.DOTALL).findall(res)
   title = re.compile(r'<title>(.*?)</title>',re.DOTALL).findall(res)
   print postid
   for title in title:
      print title
   for id in postid:
      q.put(id)


def fetch(id):
   print '正在提取',id,'内容........'
   urlbase = '******p='
   url = urlbase + id
   res = download(url)
   pagetitle = re.compile(r'<title>(.*?)</title>',re.DOTALL).findall(res)[0]
   idtitle = re.compile(r'<h2><a.href="http://*********/.*?">(.*?)</a></h2>',re.DOTALL).findall(res)[0]
   idposted = re.compile(r'<div.class="posted">(.*?)by.admin.</div>',re.DOTALL).findall(res)[0]
   #正文
   identry = re.compile(r'<div.class="entry">(.*?)<div.id="post-ratings-\d+',re.DOTALL).findall(res)[0]
   pic = re.compile(r'href="http.......net.viewer.php.file=(.*?)".>',re.DOTALL).findall(identry)
   #浏览次数
   idpostratings = re.compile(r'<div.id="post-ratings-\d+"(.*?)</div>',re.DOTALL).findall(res)[0]
   ratings = re.compile(r'<img.src=".*?<img.src=".*?<img.src=".*?<img.src=".*?<img.src=".*?post-ratings-image"./>(.*?vote.*?\))',re.DOTALL).findall(idpostratings)[0]
   #b = re.compile(r'<.*?><.*?><.*?><.*?><.*?><.*?>(.*?)<.*?>',re.DOTALL).findall(a)[0]
   postmetadata = re.compile(r'<div.class="postmetadata">(.*?)</div>',re.DOTALL).findall(res)[0]
   category = re.compile(r'.*?rel="category.tag">(.*?)</a>',re.DOTALL).findall(postmetadata)
   
#   for x in category:
#      print x

   tag = re.compile(r'.*?rel="tag">(.*?)</a>',re.DOTALL).findall(postmetadata)
   print '<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<'
   print idtitle
   print '----------------------------------------------------------------------------------'
   print category
   print tag
        #记录抓取成功的ID
   open('id','a').write(url+'\n')


#initialize thread pool

for i in range(MAXC):

    t = Thread(target=work)
    t.setDaemon(True)
    t.start()

feed()

q.join()





------------------------------------------------------------
我把网址屏蔽掉了,呵呵,有能成功的,说明正则表达式 是没问题的。
------------------------------
:em02 :em02 :em02

--------------------------------
修改: 代码掉了一个函数,没有复制上来,现在补上。就是 def feed(): 这个。

:em06 :em06


_________________
小博客,欢迎光临!http://zhonghe.co.de
有一种被人抛诸脑后的过去,包含一些不该遗忘的点点滴滴。欢笑之余,我将故旧拾起,才刹见自己的薄情。人世间似乎存在着某种公平,每个人都曾被抛掷在他人的遗忘中;而今你所有哽咽难宣的话语,也正是你曾为人所期盼,却永远听不见的字句。” —赫曼 赫塞


最后由 asluozijun 编辑于 2010-10-10 10:36,总共编辑了 3 次

页首
 用户资料  
 
4 楼 
 文章标题 : Re: 我的Python爬虫为什么抓取一个失败一个?
帖子发表于 : 2010-10-10 9:21 
头像

注册: 2008-03-25 15:49
帖子: 25877
地址: 谁知道?
送出感谢: 8
接收感谢: 10
小生看不懂。


页首
 用户资料  
 
5 楼 
 文章标题 : Re: 我的Python爬虫为什么抓取一个失败一个?
帖子发表于 : 2010-10-10 9:34 
头像

注册: 2010-05-05 14:24
帖子: 132
送出感谢: 0 次
接收感谢: 0 次
pocoyo 写道:
小生看不懂。


我的代码写的很烂...呵呵,见笑了. :em01 :em01


_________________
小博客,欢迎光临!http://zhonghe.co.de
有一种被人抛诸脑后的过去,包含一些不该遗忘的点点滴滴。欢笑之余,我将故旧拾起,才刹见自己的薄情。人世间似乎存在着某种公平,每个人都曾被抛掷在他人的遗忘中;而今你所有哽咽难宣的话语,也正是你曾为人所期盼,却永远听不见的字句。” —赫曼 赫塞


页首
 用户资料  
 
6 楼 
 文章标题 : Re: 我的Python爬虫为什么抓取一个失败一个?
帖子发表于 : 2010-10-10 10:06 
论坛管理员

注册: 2005-03-27 0:06
帖子: 10147
系统: Ubuntu 12.04
送出感谢: 7
接收感谢: 130
error = 'Not Found'
if error ,没有看明白用意。


页首
 用户资料  
 
7 楼 
 文章标题 : Re: 我的Python爬虫为什么抓取一个失败一个?
帖子发表于 : 2010-10-10 10:15 
头像

注册: 2010-05-05 14:24
帖子: 132
送出感谢: 0 次
接收感谢: 0 次
oneleaf 写道:
error = 'Not Found'
if error ,没有看明白用意。


error = 'Not Found'

然后是
if error in res

这是判断我查找的这个ID 是不是存在,如果不存在,res 会返回来 404 error 或者 Not Found
所以我判断下,这个页面是不是 404页面,或者 查找 关键词是不是 返回了结果。
如果没有返回结果,就会把这个ID 写进 error 这个文件中,也就是错误Log

open('error','a').write(url+'\n')
---------------------------------------------------------------------------------------------------------------

:em01 :em01


_________________
小博客,欢迎光临!http://zhonghe.co.de
有一种被人抛诸脑后的过去,包含一些不该遗忘的点点滴滴。欢笑之余,我将故旧拾起,才刹见自己的薄情。人世间似乎存在着某种公平,每个人都曾被抛掷在他人的遗忘中;而今你所有哽咽难宣的话语,也正是你曾为人所期盼,却永远听不见的字句。” —赫曼 赫塞


页首
 用户资料  
 
8 楼 
 文章标题 : Re: 我的Python爬虫为什么抓取一个失败一个?
帖子发表于 : 2010-10-10 16:22 
头像

注册: 2010-05-05 14:24
帖子: 132
送出感谢: 0 次
接收感谢: 0 次
自己解决了,呵呵.....

谢谢 oneleaf的提醒。

原因是语法有问题:

if error or 'Error 404' in res:

修改成:

if error in res or 'Error 404' in res:

--------------------------------
这样就好了,呵呵
(
是IRC里面一个大牛告诉的:))
)

:em04 :em04 :em04 :em04 :em04


_________________
小博客,欢迎光临!http://zhonghe.co.de
有一种被人抛诸脑后的过去,包含一些不该遗忘的点点滴滴。欢笑之余,我将故旧拾起,才刹见自己的薄情。人世间似乎存在着某种公平,每个人都曾被抛掷在他人的遗忘中;而今你所有哽咽难宣的话语,也正是你曾为人所期盼,却永远听不见的字句。” —赫曼 赫塞


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 8 篇帖子 ] 

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:没有注册用户 和 3 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译