网页中flash数据抓取(python爬虫简单的版本,那个时候还不懂原理,现在算是收尾吧 )

优采云 发布时间: 2021-12-14 07:25

  网页中flash数据抓取(python爬虫简单的版本,那个时候还不懂原理,现在算是收尾吧

)

  今天又浪费了一天。Python爬虫,之前写过一个简单的版本,当时没看懂原理。现在是结束了。

  以前对网络爬虫一无所知,感觉很神奇,但揭开这面纱,似乎里面的原理不难掌握。首先了解一个概念,HTTP协议,为什么叫超文本协议。超文本的概念是几乎所有的数据都是以文本方式传输的,包括文本、图片等,然后在一个网页中,需要做的就是解析这些字符数据,还原成原创文件。

  爬虫的概念是以一个网页为起点,从中找到更多的链接和数据信息,然后展开成树状,可以想象成一棵树。对于每个网页,都需要根据需求对数据进行过滤(查找图片,或搜索关键字,或搜索音频等),最后根据过滤后的URL下载数据。一般步骤是:

  网页==》网页树==》过滤信息==》下载

  笔者这里以网页图片为例:

  例如,一个网页中可能有很多图片。最基本的就是能够识别这个网页中的所有图片链接。这里的一般方法是根据正则表达式匹配网页的文本,从而采集内容。图片的链接。eg: reg = r"""src\s*="?(\S+)\.jpg"""。其次,把这些链接归档。看起来很抽象的东西可以通过这两步来实现。然后,网络树有点难,需要从网页中找到有用的网页链接,然后再过滤这些链接,有点像递归。这里有很多难点,比如当网页链接很多的时候,如何有效地过滤有效链接,如何控制搜索深度,如何分配进程等等。

  另外,由于很多国外的网站无法上传,部分网页数据下载需要通过代理;另外,考虑到部分机器性能更好,也实现了多线程机制。笔者进行了一天的研究,终于通过了调试。这是代码:

<p>import re

import os

import sys

import time

import threading

import socket

import urllib

import urllib2

server = \'127.0.0.1\'

port = \'8087\'

timeout = 720

socket.setdefaulttimeout(timeout)

class timer(threading.Thread): #The timer class is derived from the class threading.Thread

def __init__(self, num, interval,dir,url):

threading.Thread.__init__(self)

self.thread_num = num

self.interval = interval

self.url = url

self.dir = dir

self.thread_stop = False

def run(self): #Overwrite run() method, put what you want the thread do here

#while not self.thread_stop:

DownloadImgs(self.interval,self.url,self.dir)

#print \'Thread Object(%d), Time:%s\' %(self.thread_num, time.ctime())

#time.sleep(self.interval)

def stop(self):

self.thread_stop = True

def getContent(url,type):

print(">>start connecting:%s" % url)

from urllib2 import Request, urlopen, URLError, HTTPError

proxy = urllib2.ProxyHandler({\'http\':\'http://127.0.0.1:8087\'})

opener = urllib2.build_opener(proxy,urllib2.HTTPHandler)

urllib2.install_opener(opener)

try:

urlHandler = urllib2.urlopen(url)

headers = urlHandler.info().headers

length = 0

for header in headers:

if header.find(\'Length\') != -1:

length = header.split(\':\')[-1].strip()

length = int(length)

if(type=="img" and length

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线