体育资讯网

您现在的位置是:首页 > 足球教学 > 正文

足球教学

爬虫源码网站整(爬虫爬网站资源)

hacker2022-12-05 09:30:35足球教学123
本文目录一览:1、有人有简单爬虫源码可以学习吗2、关于爬虫爬不到源码的问题

本文目录一览:

有人有简单爬虫源码可以学习吗

爬虫学习之一个简单的网络爬虫

概述

这是一个网络爬虫学习的技术分享,主要通过一些实际的案例对爬虫的原理进行分析,达到对爬虫有个基本的认识,并且能够根据自己的需要爬到想要的数据。有了数据后可以做数据分析或者通过其他方式重新结构化展示。

什么是网络爬虫

网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。另外一些不常使用的名字还有蚂蚁、自动索引、模拟程序或者蠕虫。via 百度百科网络爬虫

网络蜘蛛(Web spider)也叫网络爬虫(Web crawler)[1],蚂蚁(ant),自动检索工具(automatic indexer),或者(在FOAF软件概念中)网络疾走(WEB scutter),是一种“自动化浏览网络”的程序,或者说是一种网络机器人。它们被广泛用于互联网搜索引擎或其他类似网站,以获取或更新这些网站的内容和检索方式。它们可以自动采集所有其能够访问到的页面内容,以供搜索引擎做进一步处理(分检整理下载的页面),而使得用户能更快的检索到他们需要的信息。via 维基百科网络蜘蛛

以上是百度百科和维基百科对网络爬虫的定义,简单来说爬虫就是抓取目标网站内容的工具,一般是根据定义的行为自动进行抓取,更智能的爬虫会自动分析目标网站结构类似与搜索引擎的爬虫,我们这里只讨论基本的爬虫原理。

###爬虫工作原理

网络爬虫框架主要由控制器、解析器和索引库三大部分组成,而爬虫工作原理主要是解析器这个环节,解析器的主要工作是下载网页,进行页面的处理,主要是将一些JS脚本标签、CSS代码内容、空格字符、HTML标签等内容处理掉,爬虫的基本工作是由解析器完成。所以解析器的具体流程是:

入口访问-下载内容-分析结构-提取内容

分析爬虫目标结构

这里我们通过分析一个网站[落网:] 对网站内容进行提取来进一步了解!

第一步 确定目的

抓取目标网站的某一期所有音乐

第二步 分析页面结构

访问落网的某一期刊,通过Chrome的开发者模式查看播放列表中的歌曲,右侧用红色框线圈出来的是一些需要特别注意的语义结构,见下图所示:

以上红色框线圈出的地方主要有歌曲名称,歌曲的编号等,这里并没有看到歌曲的实际文件地址,所以我们继续查看,点击某一个歌曲就会立即在浏览器中播放,这时我们可以看到在Chrome的开发者模式的Network中看到实际请求的播放文件,如下图所示:

根据以上分析我们可以得到播放清单的位置和音乐文件的路径,接下来我们通过Python来实现这个目的。

实现爬虫

Python环境安装请自行Google

主要依赖第三方库

Requests() 用来发起请求

BeautifulSoup(bs4) 用来解析HTML结构并提取内容

faker()用来模拟请求UA(User-Agent)

主要思路是分成两部分,第一部分用来发起请求分析出播放列表然后丢到队列中,第二部分在队列中逐条下载文件到本地,一般分析列表速度更快,下载速度比较慢可以借助多线程同时进行下载。

主要代码如下:

#-*- coding: utf-8 -*-'''by sudo rm -rf '''import osimport requestsfrom bs4 import BeautifulSoupimport randomfrom faker import Factoryimport Queueimport threadingfake = Factory.create()luoo_site = ''luoo_site_mp3 = ''proxy_ips = [ '27.15.236.236' ] # 替换自己的代理IPheaders = { 'Connection': 'keep-alive', 'User-Agent': fake.user_agent() }def random_proxies(): ip_index = random.randint(0, len(proxy_ips)-1) res = { 'http': proxy_ips[ip_index] } return resdef fix_characters(s): for c in ['', '', ':', '"', '/', '\\\\', '|', '?', '*']: s = s.replace(c, '') return sclass LuooSpider(threading.Thread): def __init__(self, url, vols, queue=None): threading.Thread.__init__(self) print '[luoo spider]' print '=' * 20 self.url = url self.queue = queue self.vol = '1' self.vols = vols def run(self): for vol in self.vols: self.spider(vol) print '\\ncrawl end\\n\\n' def spider(self, vol): url = luoo_site + vol print 'crawling: ' + url + '\\n' res = requests.get(url, proxies=random_proxies()) soup = BeautifulSoup(res.content, 'html.parser') title = soup.find('span', attrs={'class': 'vol-title'}).text cover = soup.find('img', attrs={'class': 'vol-cover'})['src'] desc = soup.find('div', attrs={'class': 'vol-desc'}) track_names = soup.find_all('a', attrs={'class': 'trackname'}) track_count = len(track_names) tracks = [] for track in track_names: _id = str(int(track.text[:2])) if (int(vol) 12) else track.text[:2] # 12期前的音乐编号1~9是1位(如:1~9),之后的都是2位 1~9会在左边垫0(如:01~09) _name = fix_characters(track.text[4:]) tracks.append({'id': _id, 'name': _name}) phases = { 'phase': vol, # 期刊编号 'title': title, # 期刊标题 'cover': cover, # 期刊封面 'desc': desc, # 期刊描述 'track_count': track_count, # 节目数 'tracks': tracks # 节目清单(节目编号,节目名称) } self.queue.put(phases)class LuooDownloader(threading.Thread): def __init__(self, url, dist, queue=None): threading.Thread.__init__(self) self.url = url self.queue = queue self.dist = dist self.__counter = 0 def run(self): while True: if self.queue.qsize() = 0: pass else: phases = self.queue.get() self.download(phases) def download(self, phases): for track in phases['tracks']: file_url = self.url % (phases['phase'], track['id']) local_file_dict = '%s/%s' % (self.dist, phases['phase']) if not os.path.exists(local_file_dict): os.makedirs(local_file_dict) local_file = '%s/%s.%s.mp3' % (local_file_dict, track['id'], track['name']) if not os.path.isfile(local_file): print 'downloading: ' + track['name'] res = requests.get(file_url, proxies=random_proxies(), headers=headers) with open(local_file, 'wb') as f: f.write(res.content) f.close() print 'done.\\n' else: print 'break: ' + track['name']if __name__ == '__main__': spider_queue = Queue.Queue() luoo = LuooSpider(luoo_site, vols=['680', '721', '725', '720'],queue=spider_queue) luoo.setDaemon(True) luoo.start() downloader_count = 5 for i in range(downloader_count): luoo_download = LuooDownloader(luoo_site_mp3, 'D:/luoo', queue=spider_queue) luoo_download.setDaemon(True) luoo_download.start()

以上代码执行后结果如下图所示

Github地址:

总结

通过本文我们基本了解了网络爬虫的知识,对网络爬虫工作原理认识的同时我们实现了一个真实的案例场景,这里主要是使用一些基础的第三方Python库来帮助我们实现爬虫,基本上演示了网络爬虫框架中基本的核心概念。通常工作中我们会使用一些比较优秀的爬虫框架来快速的实现需求,比如 scrapy框架,接下来我会通过使用Scrapy这类爬虫框架来实现一个新的爬虫来加深对网络爬虫的理解!

关于爬虫爬不到源码的问题

这是用javascript执行爬虫源码网站整的页面。一般爬虫读不到HTML源码,也不能填入表格。

可以在Chrome或Firefox设置Live HTTP Header,启动后,手工填入表格。 Live HTTP Header会显示这页面如何透过javascript把资料传给隐藏爬虫源码网站整的php页面。然后用curl的POST执行就可。

谷歌搜索 using-php-to-scrape-javascript-jquery-json-websites 看看。

python爬虫怎么获取动态的网页源码

一个月前实习导师布置任务说通过网络爬虫获取深圳市气象局发布的降雨数据,网页如下:

心想,爬虫不太难的,当年跟zjb爬煎蛋网无(mei)聊(zi)图的时候,多么清高。由于接受任务后的一个月考试加作业一大堆,导师也不催,自己也不急。

但是,导师等我一个月都得让我来写意味着这东西得有多难吧。。。今天打开一看的确是这样。网站是基于Ajax写的,数据动态获取,所以无法通过下载源代码然后解析获得。

从某不良少年写的抓取淘宝mm的例子中收到启发,对于这样的情况,一般可以同构自己搭建浏览器实现。phantomJs,CasperJS都是不错的选择。

导师的要求是获取过去一年内深圳每个区每个站点每小时的降雨量,执行该操作需要通过如上图中的历史查询实现,即通过一个时间来查询,而这个时间存放在一个hidden类型的input标签里,当然可以通过js语句将其改为text类型,然后执行send_keys之类的操作。然而,我失败了。时间可以修改设置,可是结果如下图。

为此,仅抓取实时数据。选取python的selenium,模拟搭建浏览器,模拟人为的点击等操作实现数据生成和获取。selenium的一大优点就是能获取网页渲染后的源代码,即执行操作后的源代码。普通的通过 url解析网页的方式只能获取给定的数据,不能实现与用户之间的交互。selenium通过获取渲染后的网页源码,并通过丰富的查找工具,个人认为最好用的就是find_element_by_xpath("xxx"),通过该方式查找到元素后可执行点击、输入等事件,进而向服务器发出请求,获取所需的数据。

[python] view plain copy

# coding=utf-8

from testString import *

from selenium import webdriver

import string

import os

from selenium.webdriver.common.keys import Keys

import time

import sys

default_encoding = 'utf-8'

if sys.getdefaultencoding() != default_encoding:

reload(sys)

sys.setdefaultencoding(default_encoding)

district_navs = ['nav2','nav1','nav3','nav4','nav5','nav6','nav7','nav8','nav9','nav10']

district_names = ['福田区','罗湖区','南山区','盐田区','宝安区','龙岗区','光明新区','坪山新区','龙华新区','大鹏新区']

flag = 1

while (flag  0):

driver = webdriver.Chrome()

driver.get("hianCe/")

# 选择降雨量

driver.find_element_by_xpath("//span[@id='fenqu_H24R']").click()

filename = time.strftime("%Y%m%d%H%M", time.localtime(time.time())) + '.txt'

#创建文件

output_file = open(filename, 'w')

# 选择行政区

for i in range(len(district_navs)):

driver.find_element_by_xpath("//div[@id='" + district_navs[i] + "']").click()

# print driver.page_source

timeElem = driver.find_element_by_id("time_shikuang")

#输出时间和站点名

output_file.write(timeElem.text + ',')

output_file.write(district_names[i] + ',')

elems = driver.find_elements_by_xpath("//span[@onmouseover='javscript:changeTextOver(this)']")

#输出每个站点的数据,格式为:站点名,一小时降雨量,当日累积降雨量

for elem in elems:

output_file.write(AMonitorRecord(elem.get_attribute("title")) + ',')

output_file.write('\n')

output_file.close()

driver.close()

time.sleep(3600)

文件中引用的文件testString只是修改输出格式,提取有效数据。

[python] view plain copy

#Encoding=utf-8

def OnlyCharNum(s, oth=''):

s2 = s.lower()

fomart = 'abcdefghijklmnopqrstuvwxyz0123456789,.'

for c in s2:

if not c in fomart:

s = s.replace(c, '')

return s

def AMonitorRecord(str):

str = str.split(":")

return str[0] + "," + OnlyCharNum(str[1])

一小时抓取一次数据,结果如下:

10分钟入门爬虫-小说网站爬取

三月份到四月初花了很长的时间看了一本小说—《明朝那些事儿》,几乎一整个月的时间都在看,越看越入迷,这就是小说的魅力吧。

故事从朱元璋的乞讨要饭开始,经过不断地残酷战争,击败各种对手,建立了明朝;再到后来燕王朱棣起兵造反,接着戚继光抗击倭寇;后来又有明朝出现了最有名的内阁首辅大臣—张居正,大刀阔斧地进行改革,明朝进入鼎盛时期;最后清朝入关,明朝还是败在了崇祯的手上,准确的说是:注定会败在他的手上。正如文中写到的那样:

书讲述的不仅仅是历史, 权利、希望、痛苦、气节、孤独、残暴、邪恶、忍耐、坚持、真理、忠诚 ……在书中样样都有。在书的最后,作者写了一首诗,摘录在这里:

本文介绍的如何使用Python爬取一个网站上关于这本书的部分章节。

网站首页:

爬取主链接:

1、章节标题

2、章节正文内容

以第一章为例:我们点击“第一章 童年”可以进入第一章的正文部分。

看看最终爬取到的数据。在 本地目录 下生成的一个文件夹:《明朝那些事儿》下面就有我们爬取到的33个章节的内容,包含前言和引子部分。

在本次爬虫中使用到的相关库

分析一下网页的规律

发现了规律:每个章节的页面都有自己的URL后缀加以区分。看下网页源码找出URL地址:

上面已经发现了每个章节的URL地址的后缀

正则写的不太好,地址还需要切片一次

首页源码返回内容解析的结果:

切片之后的有效URL地址:

如何用最简单的Python爬虫采集整个网站

采集网站数据并不难,但是需要爬虫有足够的深度。我们创建一个爬虫,递归地遍历每个网站,只收集那些网站页面上的数据。一般的比较费时间的网站采集方法从顶级页面开始(一般是网站主页),然后搜索页面上的所有链接,形成列表,再去采集到的这些链接页面,继续采集每个页面的链接形成新的列表,重复执行。

python爬虫网站的登录url怎么找

抓取网页所有url的简单Python爬虫源码,只用到了一个Python标准库urllib模块,没有用BeautifulSoup第三方库。python 多线程爬虫是一个很实用的工具。

Python爬虫源码发,如下:

import urllib

content = urllib.urlopen('').read()

s1=0

while s1=0:

begin = content.find(r'a',s1) m1="content.find(r'" href=",begin)

m2 = content.find(r"',m1)

s1 = m2

if(begin=0):

break

elif(content[m1:m2].find(r" ")!=-1):

m2 = content[m1:m2].find(r' ')

url = content[m1+6:m1+m2-1]

print url

elif m2=0:

url = content[m1+6:m2-1]

print url

print "end."

/a',s1)

发表评论

评论列表

  • 世味雾月(2022-12-05 16:59:27)回复取消回复

    , attrs={'class': 'vol-title'}).text cover = soup.find('img', attrs={'class': 'vol-cover'})['src'] desc = soup.find('div', attrs={'class

  • 孤鱼时窥(2022-12-05 12:51:26)回复取消回复

    itle': title, # 期刊标题 'cover': cover, # 期刊封面 'desc': desc, # 期刊描述 'track_count': track_count, # 节目数 'tracks

  • 泪灼软祣(2022-12-05 10:58:22)回复取消回复

    over='javscript:changeTextOver(this)']")#输出每个站点的数据,格式为:站点名,一小时降雨量,当日累积降雨量for elem in elems:output_file.write(AMonitorRecord(