python爬虫下载(python爬虫下载pdf文件)
Python3.xx中写爬虫,下载图片除了urlretrieve方法,还有什么库的什么方法呢?
Part 1. urllib2
urllib2是Python标准库提供的与网络相关的库,是写爬虫最常用的一个库之一。
想要使用Python打开一个网址,最简单的操作即是:
your_url = ""html = urllib2.urlopen(your_url).read()12
这样所获得的就是对应网址(url)的html内容了。
但有的时候这么做还不够,因为目前很多的网站都有反爬虫机制,对于这么初级的代码,是很容易分辨出来的。例如本文所要下载图片的网站,上述代码会返回HTTPError: HTTP Error 403: Forbidden错误。
那么,在这种情况下,下载网络图片的爬虫(虽然只有几行代码,但一个也可以叫做爬虫了吧,笑),就需要进一步的伪装。
要让爬虫伪装成浏览器访问指定的网站的话,就需要加入消息头信息。所谓的消息头信息就是在浏览器向网络服务器发送请求时一并发送的请求头(Request Headers)信息和服务器返回的响应头(Response Headers)信息。
例如,使用FireFox打开时所发送的Request Headers的部分内容如下:
Host:"publicdomainarchive.com/"User-Agent:"Mozilla/5.0 (Windows NT 10.0; WOW64; rv:50.0) Gecko/20100101 Firefox/50.0"Accept:"text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"...1234
还有一些其他属性,但其中伪装成浏览器最重要的部分已经列出来了,即User-Agent信息。
要使用Headers信息,就不能再仅仅向urlopen方法中传入一个地址了,而是需要将HTTP Request的Headers封装后传入:
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:50.0) Gecko/20100101 Firefox/50.0'}req = urllib2.Request(url = url, headers = headers)content = urllib2.urlopen(req).read()123
这样,就获得了网站的html内容。
接下来,就需要从html去获取图片的链接。
Part 2. HTMLParser
HTMLParser是Python提供的HTML解析库之一。
但Python提供的这个类中很多方法都没有实现,因而基本上这个库只负责进行解析,但解析完了什么都不做。所以如果需要对HTML中的某些元素进行加工的话,就需要用户自己去实现其中的一些方法。本文仅实现其中的handle_starttag方法:
class MyHTMLParser(HTMLParser): #继承HTMLParser类
def __init__(self): #初始化
HTMLParser.__init__(self) def handle_starttag(self, tag, attrs):
#参数tag即由HTMLParser解析出的开始标签,attrs为该标签的属性
if tag == "img": #下载图片所需要的img标签
if len(attrs) == 0: pass
else: for (variable, value) in attrs: #在attrs中找到src属性,并确定其是我们所要下载的图片,最后将图片下载下来(这个方法当然也有其他的写法)
if variable == "src" and value[0:4] == 'http' and value.find('x') = 0:
pic_name = value.split('/')[-1] print pic_name
down_image(value, pic_name)123456789101112131415
Part 3. 下载图片
从handle_starttag方法中,我们已经获得了图片的url,那么,最后一步,我们要下载图片了。
当然,要获得网络上的图片,自然也需要向服务器发送请求,一样需要用到urllib2这个库,也需要用到上面所用到的请求头。
以下是down_image()方法的主要代码:
binary_data = urllib2.urlopen(req).read()
temp_file = open(file_name, 'wb')
temp_file.write(binary_data)
temp_file.close()1234
因为这次打开的网址是个图片,所以urllib2.urlopen(req).read()所获取的就是图片的数据,将这些数据需要以二进制的方式写入本地的图片文件,即将图片下载下来了。
因为图片的url的最后一部分是图片的名字,所以可以直接用做本地的文件名,不用担心命名冲突,也不用担心后缀不符,很是方便。
Part 4. getFreeImages.py
这个下载图片的脚本的完整代码如下:
import urllib2,osfrom HTMLParser import HTMLParser
class MyHTMLParser(HTMLParser):
def __init__(self):
HTMLParser.__init__(self) #self.links = {}
def handle_starttag(self, tag, attrs):
#print "Encountered the beginning of a %s tag" % tag
if tag == "img": if len(attrs) == 0: pass
else: for (variable, value) in attrs: if variable == "src" and value[0:4] == 'http' and value.find('x') = 0:
pic_name = value.split('/')[-1] print pic_name
down_image(value, pic_name)def down_image(url,file_name):
global headers
req = urllib2.Request(url = url, headers = headers)
binary_data = urllib2.urlopen(req).read()
temp_file = open(file_name, 'wb')
temp_file.write(binary_data)
temp_file.close()if __name__ == "__main__":
img_dir = "D:\\Downloads\\domain images"
if not os.path.isdir(img_dir):
os.mkdir(img_dir)
os.chdir(img_dir) print os.getcwd()
url = ""
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:50.0) Gecko/20100101 Firefox/50.0'}
all_links = []
hp = MyHTMLParser() for i in range(1,30):
url = '' + str(i) + '/'
req = urllib2.Request(url = url, headers = headers)
content = urllib2.urlopen(req).read()
hp.feed(content)
hp.close()1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
请问怎么通过python爬虫获取网页中的pdf文件?
首先把链接URL爬取出来,然后get流下载pdf文件,再用pdf模块来读取它。
美图秀秀批处理自动下载到电脑
美图秀秀批处理自动下载到电脑需要爬虫技术。根据查询相关信息,运用python爬虫,可以实现美图秀秀图片的批量下载。python爬虫是高效获取信息的途径,需要设置合理的请求头和网址链接。
python网络爬虫可以干啥
Python爬虫开发工程师,从网站某一个页面(通常是首页)开始,读取网页的内容,找到在网页中的其它链接地址,然后通过这些链接地址寻找下一个网页,这样一直循环下去,直到把这个网站所有的网页都抓取完为止。如果把整个互联网当成一个网站,那么网络蜘蛛就可以用这个原理把互联网上所有的网页都抓取下来。
网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动的抓取万维网信息的程序或者脚本。另外一些不常使用的名字还有蚂蚁,自动索引,模拟程序或者蠕虫。爬虫就是自动遍历一个网站的网页,并把内容都下载下来
网络爬虫另外一些不常使用的名字还有蚂蚁,自动索引,模拟程序或者蠕虫。随着网络的迅速发展,万维网成为大量信息的载体,如何有效地提取并利用这些信息成为一个巨大的挑战。搜索引擎(Search Engine),例如传统的通用搜索引擎AltaVista,Yahoo!和Google等,作为一个辅助人们检索信息的工具成为用户访问万维网的入口和指南。但是,这些通用性搜索引擎也存在着一定的局限性,如:
(1) 不同领域、不同背景的用户往往具有不同的检索目的和需求,通用搜索引擎所返回的结果包含大量用户不关心的网页。
(2)通用搜索引擎的目标是尽可能大的网络覆盖率,有限的搜索引擎服务器资源与无限的网络数据资源之间的矛盾将进一步加深。
(3)万维网数据形式的丰富和网络技术的不断发展,图片、数据库、音频、视频多媒体等不同数据大量出现,通用搜索引擎往往对这些信息含量密集且具有一定结构的数据无能为力,不能很好地发现和获取。
(4)通用搜索引擎大多提供基于关键字的检索,难以支持根据语义信息提出的查询。
为了解决上述问题,定向抓取相关网页资源的聚焦爬虫应运而生。聚焦爬虫是一个自动下载网页的程序,它根据既定的抓取目标,有选择的访问万维网上的网页与相关的链接,获取所需要的信息。与通用爬虫(general?purpose web crawler)不同,聚焦爬虫并不追求大的覆盖,而将目标定为抓取与某一特定主题内容相关的网页,为面向主题的用户查询准备数据资源。
用Python爬虫爬取爱奇艺上的VIP电影视频,是违法行为吗?
不管是用python还是其他的语言来爬取电影资源,都是不合法的。特别是VIP电影,都是有版权保护的,不适当的使用爬取的资源可能会给他人和自己带来很多麻烦。比如有些人下载了电影,然后再出售给其他人观看,这种性质更加严重,会被罚的很重。所以建议还是通过官方渠道观看就好了,不要私自爬取VIP电影。
python爬虫下载缓慢?
维持一个你想要爬的url(图片、视频啥的)队列,然后多线程处理。