python爬取静态和动态网页

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zzuchengming/article/details/54618395

python爬取静态网页

1,网上关于静态网页的爬取例子有很多。自己写的一个python爬百度视频搜索网页的代码:

#!/usr/bin/python
#coding=utf-8

import sys
import urllib
import urllib2
from bs4 import  BeautifulSoup

reload(sys)
sys.setdefaultencoding('utf-8')

url = "http://v.baidu.com/v"

class video_url(object):
    def __init__(self,query):
        self.query = query
    def get_urlofquery(self):
        values = {
            'word': self.query,
            'ie': 'utf-8'
        }
        data = urllib.urlencode(values)
        urltemp = url + '?' + data
        print urltemp
        try:
            request = urllib2.Request(urltemp)
            response = urllib2.urlopen(request)
            # print response.read()#返回的就是百度视频搜索‘食在囧途’后的页面
        except urllib2.URLError, e:
            if hasattr(e, "code"):
                print e.code
            if hasattr(e, "reason"):
                print e.reason

        data = response.read()
        soup = BeautifulSoup(data, 'html.parser')
        items = soup.find_all(name='h3',limit=5)
        link_list = []
        if items:
            for item in items:
                if item.find(name='a'):  # find函数返回布尔值
                    if item.a.has_attr('href'):
                        temp1 = item.a.get('href').strip('\n')
                        # temp2 = item.span.text.strip('\n')
                        if temp1 != '#':
                            link_list.append(temp1)

        return link_list

if __name__ == '__main__':
    tempobject = video_url("卧虎藏龙")
    link_list = tempobject.get_urlofquery()
    if link_list:
        for i in range(0, len(link_list)):
            print link_list[i]
    else:
        print "no link!"

几个参考资料网址:
Python爬虫入门三之Urllib库的基本使用
Beautiful Soup 4.4.0 文档
关于BeautifulSoup的总结

2,如果所需内容都能通过data = response.read()获得,那自然没问题,但是如果想要爬取的内容是动态js返回的,那么靠data = response.read()得到的静态html是没有所想爬取内容的,这时候需要另外的工具。

python爬取动态网页

1,所需工具
selenium+PhantomJS
具体安装:
a,在cmd下切换到python安装目录,我的是C:\Python27\Scripts下,用命令:

easy_install selenium

即可安装selenium模块。
b,下载phantomjs
解压到C:\Python27\Scripts下,若解压后文件名假定为xxx, 则要把phantomjs.exe直接放在xxx下,有些在解压后phantomjs.exe在xxx\bin\下,那么复制phantomjs.exe到xxx\下,删除bin即可。

其实selenium+PhantomJS就是模拟浏览器访问url,然后将动态网页所有内容转化为静态html返回,这样速度回很慢。目前只知道这点,先记录一下。
具体代码如下:

#!/usr/bin/python
#coding=utf-8

import sys
from selenium import webdriver

reload(sys)
sys.setdefaultencoding('utf-8')

driver = webdriver.PhantomJS(executable_path='C:\Python27\Scripts\phantomjs-2.1.1-windows\phantomjs.exe')
driver.get("http://www.baidu.com")
data = driver.title
print data

几个参考资料网址:
如何爬取JS动态生成的数据?
Python爬虫爬取动态页面思路+实例(一)
python爬虫(上)–请求——关于模拟浏览器方法
Python抓取网页动态数据——selenium webdriver的使用
[Python爬虫] 在Windows下安装PIP+Phantomjs+Selenium
爬虫再探实战(三)———爬取动态加载页面——SELENIUM
爬虫再探实战(四)———爬取动态加载页面——请求JSON

猜你喜欢

转载自blog.csdn.net/zzuchengming/article/details/54618395
今日推荐