网页中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