精华内容
下载资源
问答
  • 1)利用python抓取网页页面 2)将抓取到的网页 生成txt文件导出到电脑桌面 准备工作: 电脑构建python环境 安装python编辑环境IDE(本文所述,利用pyCharm编辑器) 新建项目文件 1)项目新建pydemo.py 文件 ...

    分析需求:

    1)利用python抓取网页页面
    2)将抓取到的网页 生成txt文件导出到电脑桌面

    准备工作:

    电脑构建python环境
    安装python编辑环境IDE(本文所述,利用pyCharm编辑器)
    新建项目文件

    1)项目中新建pydemo.py 文件

    2)配置python解释器

    3)编辑文件代码如下

    import urllib
    import urllib.request
    
    # 抓取页面方法,调用该方法返回抓取到数据
    def read_pageHtml(url):
        file = urllib.request.urlopen(url)
        data = file.read()
        return data
    
    # 传入需要抓取页面的链接 并调用抓取页面方法获得页面数据
    url = "https://www.baidu.com/"
    data = read_pageHtml(url)
    # 控制台打印数据
    print(data)
    # 将数据生成txt文件方法 传入保存文件路径 storagePath 以及文件数据 data
    def storageToLocalFiles(storagePath, data):
        fhandle = open(storagePath,"wb")
        fhandle.write(data)
        fhandle.close()
    # 调用文件数据保存方法
    storagePath = "C:/Users/Pathliu/Desktop/pyweb.txt"
    storageToLocalFiles(storagePath, data)
    

    4)运行 点击 run 

    5)桌面得到生成的txt文件

    获取到的数据,根据你需要利用数据的功能,再进行定量分析。

     

    展开全文
  • python 抓取网页链接Prerequisite: 先决条件: Urllib3: It is a powerful, sanity-friendly HTTP client for Python with having many features like thread safety, client-side SSL/TSL verification, ...

    python 抓取网页链接

    Prerequisite:

    先决条件:

    1. Urllib3: It is a powerful, sanity-friendly HTTP client for Python with having many features like thread safety, client-side SSL/TSL verification, connection pooling, file uploading with multipart encoding, etc.

      Urllib3 :这是一个功能强大,对环境友好的Python HTTP客户端,具有许多功能,例如线程安全,客户端SSL / TSL验证,连接池,使用多部分编码的文件上传等。

      Installing urllib3:

      安装urllib3:

          $ pip install urllib3
      
      
    2. BeautifulSoup: It is a Python library that is used to scrape/get information from the webpages, XML files i.e. for pulling data out of HTML and XML files.

      BeautifulSoup :这是一个Python库,用于从网页,XML文件中抓取/获取信息,即从HTML和XML文件中提取数据。

      Installing BeautifulSoup:

      安装BeautifulSoup:

          $ pip install beautifulsoup4
      
      

    Commands Used:

    使用的命令:

    html= urllib.request.urlopen(url).read(): Opens the URL and reads the whole blob with newlines at the end and it all comes into one big string.

    html = urllib.request.urlopen(url).read() :打开URL并以换行符结尾读取整个blob,所有这些都变成一个大字符串。

    soup= BeautifulSoup(html,'html.parser'): Using BeautifulSoup to parse the string BeautifulSoup converts the string and it just takes the whole file and uses the HTML parser, and we get back an object.

    soup = BeautifulSoup(html,'html.parser') :使用BeautifulSoup解析字符串BeautifulSoup转换该字符串,它只获取整个文件并使用HTML解析器,然后返回一个对象。

    tags= soup('a'): To get the list of all the anchor tags.

    tags =汤('a') :获取所有锚标签的列表。

    tag.get('href',None): Extract and get the data from the href.

    tag.get('href',None) :从href中提取并获取数据。

    网页链接的Python程序 (Python program to Links from a Webpage)

    # import statements
    import urllib.request, urllib.parse, urllib.error
    from bs4 import BeautifulSoup
    
    # Get links
    # URL of a WebPage
    url = input("Enter URL: ") 
    
    # Open the URL and read the whole page
    html = urllib.request.urlopen(url).read()
    # Parse the string
    soup = BeautifulSoup(html, 'html.parser')
    # Retrieve all of the anchor tags
    # Returns a list of all the links
    tags = soup('a')
    
    #Prints all the links in the list tags
    for tag in tags: 
      # Get the data from href key
      print(tag.get('href', None), end = "\n")
    
    

    Output:

    输出:

    Enter URL: https://www.google.com/
    https://www.google.com/imghp?hl=en&tab=wi
    https://maps.google.com/maps?hl=en&tab=wl
    https://play.google.com/?hl=en&tab=w8
    https://www.youtube.com/?gl=US&tab=w1
    https://news.google.com/nwshp?hl=en&tab=wn
    https://mail.google.com/mail/?tab=wmhttps://drive.google.com/?tab=wo
    https://www.google.com/intl/en/about/products?tab=wh
    http://www.google.com/history/optout?hl=en
    /preferences?hl=en
    https://accounts.google.com/ServiceLogin?hl=en&passive=true
    &continue=https://www.google.com/
    /advanced_search?hl=en&authuser=0
    /intl/en/ads/
    /services/
    /intl/en/about.html
    /intl/en/policies/privacy/
    /intl/en/policies/terms/
    
    
    

    翻译自: https://www.includehelp.com/python/scraping-links-from-a-webpage.aspx

    python 抓取网页链接

    展开全文
  • 抓取html页面中的json数据

    万次阅读 2017-07-07 15:44:37
    在开发爬虫时,我们有时需要抓取页面中的ajax的json数据。 解决方案: 采用正则表达式,高端大气上档次,重点是简洁,举个栗子: html页面: 上面省去N行。。。。 var userLogin = function(){ var ...

    遇见问题:

    在开发爬虫时,我们有时需要抓取页面中的ajax的json数据。


    解决方案:

    采用正则表达式,高端大气上档次,重点是简洁,举个栗子:


    html页面:

    上面省去N行。。。。
    var userLogin = function(){
    		var jsonBean = {
        	number:"177***7495",
        	intLoginType:"4",
        	areaCode:"0471",
        	isBusinessCustType:"N",
        	identifyType:"B",
        	userLoginType:"4",
        	password:"",
        	randomPass:"",
        	noCheck:"N",
        	isSSOLogin:"Y",
        	sRand:"SSOLogin"
        	};
    下面省去N行。。。。
    		

    正则抓取数据:

    public static void praseStr() {
            String html = Models.readTxtFile("E:\\tmpTxt\\test0703.html");
            String any ="[\\s\\S]*" ;//任何东西
            StringBuffer regex = new StringBuffer("");
            regex.append("(number.*)").append(any);//目标字段,下同
            regex.append("(intLoginType.*)").append(any);
            regex.append("(areaCode.*)").append(any);
            regex.append("(isBusinessCustType.*)").append(any);
            regex.append("(identifyType.*)").append(any);
            regex.append("(userLoginType.*)").append(any);
            regex.append("(password.*)").append(any);
            regex.append("(randomPass.*)").append(any);
            regex.append("(noCheck.*)").append(any);
            regex.append("(isSSOLogin.*)").append(any);
            regex.append("(sRand.*)").append(any);
            Pattern p = Pattern.compile(regex.toString());
            Matcher m = p.matcher(html);
            int countAll = m.groupCount();
            StringBuffer json = new StringBuffer("{");
            if(m.find())
            for (int i=1;i<=countAll;i++){
                json.append(m.group(i)) ;
            }
            System.out.println(json.append("}").toString() );
           
        }

    抓取结果:

    {number:"177***7495",intLoginType:"4",areaCode:"0471",isBusinessCustType:"N",identifyType:"B",userLoginType:"4",password:"",randomPass:"",noCheck:"N",isSSOLogin:"Y",sRand:"SSOLogin"}


    展开全文
  • 主要介绍了Nodejs抓取html页面内容的关键代码,另外还给大家附上了nodejs抓取网页内容,非常不错,对node.js抓取页面内容感兴趣的朋友一起学习吧
  • 在这篇博客,我主要是说明要做的两件事,一是入库,二是遍历拿到的链接继续访问。如此往复,这样就构成了一个网络爬虫的雏形。

    前言:

      在上一篇《网络爬虫初步:从访问网页到数据解析》中,我们讨论了如何爬取网页,对爬取的网页进行解析,以及访问被拒绝的网站。在这一篇博客中,我们可以来了解一下拿到解析的数据可以做的事件。在这篇博客中,我主要是说明要做的两件事,一是入库,二是遍历拿到的链接继续访问。如此往复,这样就构成了一个网络爬虫的雏形。


    笔者环境:

      系统:     Windows 7
                CentOS 6.5
      运行环境:  JDK 1.7
                Python 2.6.6
      IDE:      Eclipse Release 4.2.0
                PyCharm 4.5.1
      数据库:    MySQL Ver 14.14 Distrib 5.1.73


    效果图:

      这里只截取开始的一部分数据。这些数据我是保存在MySQL中的。

     

     

    思路梳理:

      前面说到,我们拿到数据要做两件:数据保存与数据分析。

      我们整个逻辑过程是这样的:

        1.Java传递链接参数给Python;

        2.Python解析HTML返回必要信息给Java;

        3.Java拿到数据进行入库;

        4.对解析出的有效链接进行继续遍历(这里是采用图的广度优先遍历)

        5.反复以上的4个步骤,直到没有可继续访问的有效链接为止,这里是使用递归迭代。

      关于数据保存,倒是没有什么好说的。因为我是在Linux(CentOS)下运行程序的。所以,你的Linux中必须要有MySQL,另外,我是通过Java来进行数据库操作的,所以这里你的系统中也有要Mysql的Java驱动包。

     

    开发过程:

    1.Python解析数据

    get_html_response.py


    # encoding=utf-8
    
    import HTMLParser
    
    import utils as utils
    
    class ListWebParser(HTMLParser.HTMLParser):
        def __init__(self):
            HTMLParser.HTMLParser.__init__(self)
            self.tagAFlag = False
    
            self._name = None
            self._address = None
            self._info = []
    
        def handle_starttag(self, tag, attrs):
            if tag == 'a':
                for name, value in attrs:
                    if name == 'href' and utils.isMatch(value, '^http'):
                        self._info.append((self._name, self._address))
                        self.tagAFlag = True
                        self._address = value
                        self._name = None
    
                        # print 'Address: ', value
    
        def handle_endtag(self, tag):
            if tag == 'a':
                self.tagAFlag = False
    
        def handle_data(self, data):
            if self.tagAFlag:
                name = data.decode('utf-8')
                if self._name:
                    self._name = str(self._name) + ' ' + name
                else:
                    self._name = name
    
        def getLinkList(self):
            return self._info

    html_parser.py

    # encoding=utf-8
    
    '''
        对Html文件进行解析
    '''
    
    import sys
    reload(sys)
    sys.setdefaultencoding('utf8')
    
    from list_web_parser import ListWebParser
    import get_html_response as geth
    
    def main(html):
        myp = ListWebParser()
        get_html = geth.get_html_response(html)
        myp.feed(get_html)
        link_list = myp.getLinkList()
        myp.close()
    
        for item in link_list:
            if item[0] and item[1]:
                print item[0], '$#$', item[1]
    
    if __name__ == "__main__":
        if not sys.argv or len(sys.argv) < 2:
            print 'You leak some arg.' # http://www.cnblogs.com/Stone-sqrt3/
        main(sys.argv[1])

    2.Java入库

    对于Java中对数据库的操作,也没什么好说说明的。如果你写地JDBC,那么这对于你而言将是小菜一碟。关键代码如下:

    public class DBServer {
    
    	private String mUrl = DBModel.getMysqlUrl();
    	private String mUser = DBModel.getMysqlUesr();
    	private String mPassword = DBModel.getMysqlPassword();
    	private String mDriver = DBModel.getMysqlDerver();
    	
    	private Connection mConn = null;
    	private Statement mStatement = null;
    	
    	public DBServer() {
    		initEvent();
    	}
    	
    	private void initEvent() {
    		mUrl = DBModel.getMysqlUrl();
    		mUser = DBModel.getMysqlUesr();
    		mPassword = DBModel.getMysqlPassword();
    		mDriver = DBModel.getMysqlDerver();
    		
    		try {
    			Class.forName(mDriver).newInstance();
    			mConn = DriverManager.getConnection(mUrl, mUser, mPassword);
    			
    			mStatement = mConn.createStatement();
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    	}
    	
    	/**
    	 * 数据库查询
    	 * TODO
    	 * DBServer
    	 * @param sql
    	 * 			查询的sql语句
    	 */
    	public void select(String sql) {
    		try {
    			ResultSet rs = mStatement.executeQuery(sql);
    			while (rs.next()) {
                    String name = rs.getString("name");
                    System.out.println(name);
                }
    			
    			rs.close();
    		} catch (SQLException e) {
    			e.printStackTrace();
    		}
    	}
    	
    	/**
    	 * 插入新数据
    	 * DBServer
    	 * @param sql
    	 * 			插入的sql语句
    	 */
    	public int insert(String sql) {
    		try {
    			int raw = mStatement.executeUpdate(sql);
    			return raw;
    		} catch (SQLException e) {
    			e.printStackTrace();
    			return 0;
    		}
    	}
    	
    	/**
    	 * 某一个网址是否已经存在
    	 * DBServer
    	 * @param sql
    	 * 			查询的sql语句
    	 */
    	public boolean isAddressExist(String sql) {
    		try {
    			ResultSet rs = mStatement.executeQuery(sql);
    			if (rs.next()) {
    				return true;
    			}
    			rs.close();
    		} catch (SQLException e) {
    			e.printStackTrace();
    		}
    		
    		return false;
    	}
    	
    	public void close() {
    		try {
    			if (mConn != null) {
    				mConn.close();
    			}
    			
    			if (mStatement != null) {
    				mStatement.close();
    			}
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    	}
    }

    3.Java进行递归访问链接

    /**
    	 *  遍历从某一节点开始的所有网络链接
    	 * LinkSpider
    	 * @param startAddress
    	 * 			 开始的链接节点
    	 */
    	private static void ErgodicNetworkLink(String startAddress) {
    		SpiderQueue queue = getAddressQueue(startAddress);
    //		System.out.println(queue.toString());
    		
    		SpiderQueue auxiliaryQueue = null; // 记录访问某一个网页中解析出的网址
    		while (!queue.isQueueEmpty()) {
    			WebInfoModel model = queue.poll();
    			
    			// TODO 判断数据库中是否已经存在
    			if (model == null || DBBLL.isWebInfoModelExist(model)) {
    				continue;
    			}
    			
    			// TODO 如果不存在就继续访问
    			auxiliaryQueue = getAddressQueue(model.getAddres());
    			System.out.println(auxiliaryQueue);
    			
    			// TODO 对已访问的address进行入库
    			DBBLL.insert(model);
    			
    			if (auxiliaryQueue == null) {
    				continue;
    			}
    			
    			while (!auxiliaryQueue.isQueueEmpty()) {
    				queue.offer(auxiliaryQueue.poll());
    			}
    		}
    	}
    	
    	/**
    	 * 获得某一链接下的所有合法链接
    	 * LinkSpider
    	 * @param htmlText
    	 * 			网络链接
    	 * @return
    	 */
    	private static SpiderQueue getAddressQueue(String htmlText) {
    		if (htmlText == null) {
    			return null;
    		}
    		
        	SpiderQueue queue = PythonUtils.getAddressQueueByPython(htmlText);
        	
        	return queue;
        }

    本程序的内存及线程情况:

    内存:


    线程:


    爬取速度:



    要点说明:

    1.系统中的MySQL及MySQL包

      你的Linux中必须要有MySQL,另外,我是通过Java来进行数据库操作的,所以这里你的系统中也有要Mysql的Java驱动包。这一点在上面也有说明,不过这里还是要强调一下。如果你写过JDBC的程序,那么这个驱动包,我想你应该是有的,如果你没写过,那就去下一个吧。


    2.需要一个辅助Queue

      在上面的代码中,我们可以看到我们有两个SpiderQueue。一个是我们待访问的队列queue,保存我们将要访问的链接列表;另一个是辅助队列auxiliaryQueue,用于获得从Python解析出来的数据。


    3.使用图的广度优先搜索算法进行链接爬取

      这是从链接的相关性上考虑的。如果选择深度优先,那么随着遍历的深入,可能链接的相关性就会越来越小了。而广度优先搜索则不会这样,因为我们都知道在同一个页面中的链接总是会因为一些因素要展示在同一个页面中,那么它们的相关性就会比较靠谱。


    4.单线程与多线程

      完成以上操作,如果你的程序正常运行。在前期是比较快的,可是到了稳定期的时候就一般是1s钟出一条数据。这个有点慢,我会在下一篇博客利用多线程来解决这个问题。


    5.MySQL中添加一个叫cipher_address的字段

      此字段用于address的加密生成(MD5 or SHA1)。下面举个例子:

    可能你有一个疑问,为什么要这个字段?如果你这样思考了,那么对于你,是有益的。我们知道其实MySQL对一个很长的字符串进行select的时候,是相对来说比较慢的。这时,我们可以把这个address进行哈希一下,形成一个长度适中,又比较相近的字符串,这样MySQL在比较时会容易一些(当然,你可以不使用这个字段)。


    6.OOM异常

      完全按照本文中的代码和讲解来进行编码的话,会获得一个OOM的异常(我的程序是跑了1天半的时时间)。如下:


    数量大概在23145条左右


    对于这一点在上面关于内存和线程的展示图中可以看到原因。

    展开全文
  • Python网络页面抓取页面分析

    万次阅读 2013-10-31 11:28:30
    转载本文请以链接形式注明出处。 1.前言  Python的网络抓取有很多包可以实现,比如:urllib、urllib2、httplib、httplib2。其中httplib、httplib2是专门处理与http相关的;而urllib、urllib2是借助于httplib、...
  • 在检查过程,它会检查每个页面以查看是否有链接的“有趣”文件,如果找到有趣的链接,它将为您标记该链接,以便您进行签出。 有一个选项页面,可让您自定义所有工作方式: 获取扩展 在Chrome网上应用店获取它...
  • 7. 网页已经抓取了,那么剩下就分析页面包含的链接了,创建findlinks目录,在其下创建main.go文件,main.go文件代码内容如下: package main import (  "os"  "fmt"  "golang.org/x/net/html" ) func main...
  • Java简单实现爬虫技术,抓取整个网站所有链接+图片+文件(思路+代码) 写这个纯属个人爱好,前两天想玩爬虫,但是百度了一大圈也没发现有好一点的帖子,所以就自己研究了下,亲测小点的网站还是能随随便便爬完的...
  • java抓取网页数据获取网页所有的链接实例分享,使用方法,只要实例化HtmlParser时传入网页地址就可以了
  • 批量抓取网页pdf文件

    千次阅读 2019-02-14 16:13:53
    有一个excel,里面有数千条指向pdf下载链接的网页地址,现在,需要批量抓取这些网页地址的pdf文件。python环境: anaconda3openpyxlbeautifulsoup4 读取excel,获取网页地址 使用openpyxl库,读取.xslx文件;(曾...
  • 本文实例讲述了PHP实现抓取百度搜索结果页面【相关搜索词】并存储到txt文件。分享给大家供大家参考,具体如下: 一、百度搜索关键词【软件开发网】 【软件开发网】搜索链接 ...
  • java使用phantomJs抓取动态页面

    万次阅读 2017-04-01 10:45:54
    可以无界面加载页面,指的是和浏览器上面的页面一致,也就是解析完js的页面。所以需要爬取或者获得动态页面的,这算是利器。 3.之前自己也试了HttpUnit,不行的。网上找到的例子自己运行不了。
  • 添加修正以下功能: 1、修正了页面抓取内容路径的自动更改 2、修正了另一种样式引入的抓去@import url(""); 3、修正了外部js文件的抓取限制 4、修改了抓取链接a标签的图片资源
  • 主要介绍了Python正则抓取新闻标题和链接的方法,结合具体实例形式分析了Python正则匹配页面元素及文件写入相关操作技巧,需要的朋友可以参考下
  • 使用heritrix抓取特定页面

    千次阅读 2011-12-01 16:54:11
    FrontierScheduler 是 org.archive.crawler.postprocessor 包中的一个类,它的作用是将在 Extractor 所分析得出的链接加入到 Frontier ,以待继续处理。在该类的 innerProcess(CrawlURI) 函数,首先检查当前...
  • 主要介绍了Python实现抓取HTML网页并以PDF文件形式保存的方法,结合实例形式分析了PyPDF2模块的安装及Python抓取HTML页面并基于PyPDF2模块生成pdf文件的相关操作技巧,需要的朋友可以参考下
  • 网站收录与百度蜘蛛有着直接的关系,我们平时主要是通过主动或被动的方式来吸引百度蜘蛛抓取网站页面。主动的方式就是通过站长平台的链接提交工具或其它插件,来将自己网站新的内容链接提交给搜索引擎。被动的方式是...
  • python的爬虫【1】抓取链接+标题

    千次阅读 2019-05-28 12:47:06
    链接抓包: 1、抓取它的图片地址 2、抓取标题 脚本: import requests from lxml import etree r=requests.get(‘https://bh.sb/post/44622/’).content topic=etree.HTML® html=topic.xpath(’/...
  • PHP curl 抓取页面时的 cookie 问题

    千次阅读 2014-04-24 11:39:41
    PHP curl 抓取页面时的 cookie 问题 Posted on 28th October 2009 by Nio in ...使用 PHP curl 抓取页面时,可以设置 cookie 保存的文件,示例代码: $cookie_path = 'cookie.txt'; $ch = curl_init()
  • Scrapy抓取Ajax动态页面

    千次阅读 2018-03-02 16:28:31
    https://www.jianshu.com/p/1e35bcb1cf21这次我们要抓取的网站是淘女郎的页面,全站...分析工作用Chrome打开淘女郎的首页的美人库,这个页面毫无疑问是会展示所有的模特的信息,同时打开Debug工具,在network选项...
  • 网络爬虫:抓取页面图片

    千次阅读 2015-03-05 11:56:03
    也有很多人先写正则,根据正则的规则抓取页面的信息,当然这都是一种方式,根据业务需求去量身定做就好了,其实这两种方式各有好处,第一适用于页面不会变化的,在代码里面写正则还是容易很多,第
  • 文章链接分析 文章内容分析 io流生成jsp页面 squarz设置定时抓取 前言看视频看的累了 写写博文~ 很久以前就想有个自己的博客。csdn很好,可是我不是专家啊,还是功底不够, 没有权限,也就不能实现自己的一些想法。...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 42,827
精华内容 17,130
关键字:

抓取链接页面中文件