精华内容
下载资源
问答
  • 小白,,完全不懂,初步学习笔记教程:https://www.zhihu.com/question/413854335爬虫方法,其实就是代码来伪装成浏览器,去访问对应url,然后获取到返回到内容,这部分内容可以是网页源代码图片,mp3,...

    小白,,完全不懂,初步学习笔记

    教程:https://www.zhihu.com/question/413854335

    爬虫的方法,其实就是用代码来伪装成浏览器,去访问对应的url,然后获取到返回到的内容,这部分内容可以是网页源代码,图片,mp3,视频等,其实归根结底就是获取到url指向的在服务器里对应的文件内容,然后根据不同的文件类型来选择不同编码来解析。而在这基础上,则会有很多其他补充内容和技巧,比如反爬虫和规避反爬虫,获取验证码,获取JS实时生成的内容,甚至模拟键鼠操作等。

    新手的话,可以先去看看小甲鱼的urllib3爬虫教程,然后可以接着学request库,beautifulsoup4,spicy(没记错的话好像是这个

    另外验证码可以自己用深度学习框架Keras构建一个CNN网络模型来识别验证码。

    教程:https://zhuanlan.zhihu.com/p/87321559

    提取网页源代码——Requests 工具包

    在我们提取网络信息之前,我们必须将网页的源代码进行提取,Requests工具包现在可以说是最好用和最普及的静态网页爬虫工具

    Requests工具包的使用非常简单,最主要使用的函数为requests.get(url),其中参数url就是我们想提取源代码的网页,再通过requests.get(url).text将页面转换为字符串,就可以供我们使用了。

    信息提取——Xpath

    我们普通的网页一般都是XML文档格式,当我们想提取里面的内容时,我们需要借助Xpath来分解其中的格式

    提取我们想要的内容。在了解Xpath之前我们需要知道四个基本概念:节点、元素、属性、文本 。我们来看一个例子:

    Harry Potter

    J K. Rowling

    2005

    29.99

    这就是一个网页的源码,其中 是文档节点

    J K. Rowling是元素节点, lang="en" 是属性节点。 J K. Rowling、2005和29.99是文本(文本通常就是我们想爬取的内容)。

    实例分享——爬取豆瓣电影的信息

    我们想爬取在豆瓣网上的电影《超时空同居》的导演和演员信息。

    1.找到电影的url

    image.png

    查看网页源代码的时候,找了好多方法都不可以,右键查看,或者右键没有的话按ctrl+U就可以了

    image.png

    image.png

    2.分析TML的格式了,例如我们要找到所有的主演:

    image.png

    image.png

    主演:

    雷佳音 /

    佟丽娅 /

    张衣 /

    于和伟 /

    王正佳 /

    陶虹 /

    李念 /

    李光洁 /

    杨玏 /

    范明 /

    徐峥 /

    杨迪 /

    方龄 /

    陈昊

    类型:

    喜剧 /

    爱情 /

    奇幻

    大家可以看到有一个普遍的规律:主演的名字所对应的节点名都为a,属性都为rel="v:starring",像下面的那个类型的属性就不是rel="v:starring",这样我们就可以很轻易的用xpath的语法定位到拥有这个元素的节点,然后将所有的结果找出。

    导演:

    rel="v:directedBy">苏伦

    同理,导演的名字所对应的节点名为a,属性都为rel=" v:directedBy",我们同样可以通过这个定位找到相应的文本:

    具体的代码如下:

    import requests

    from lxml import etree

    url='https://movie.douban.com/subject/27133303/?from=showing' #输入我们的url

    get = requests.get(url).text # get(url) 得到我们的网页, text将源网页转化为字符串

    selector = etree.HTML(get) # 将源码转换为xpath可以识别的TML格式

    info = {} #字典用于储存信息

    info['电影'] = selector.xpath('//title/text()')[0].strip() # 定位电影名字

    info['导演']=selector.xpath('//a[@rel="v:directedBy"]/text()') # 定位导演名字

    info['演员']=selector.xpath('//a[@rel="v:starring"]/text()') # 定位演员名字

    print(info)

    image.png

    报错了,说没有xpath

    改错,随意搜了一个header,因为有一个网站【Python】 requests 爬取博客园内容AttributeError: 'NoneType' object has no attribute 'xpath' - IT_小树 - 博客园 (cnblogs.com)

    说可以找到header,但是我工作的这台电脑打开没有那个界面也懒得去找了,

    直接改成下面这样

    image.png

    所以代码变成这样

    url='https://movie.douban.com/subject/27133303/' #输入我们的url

    header = {"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36"}

    get = requests.get(url,headers=header).text # get(url) 得到我们的网页, text将源网页转化为字符串

    selector = etree.HTML(get) # 将源码转换为xpath可以识别的TML格式

    成功了,

    image.png

    最后我们得到一个字典集的结果:

    {'电影': '超时空同居 (豆瓣)', '导演': ['苏伦'], '演员': ['雷佳音', '佟丽娅',

    '张衣', '于和伟', '王正佳', '陶虹', '李念', '李光洁', '杨玏', '范明', '徐峥',

    '杨迪', '方龄', '陈昊']}

    image.png

    所以进行案例二的联系:

    1.打开豆瓣的分类,假设想爬取这些电影的信息

    image.png

    2.进入开发者模式F12后刷新,打开其中的network

    image.png

    在点击xhr

    image.png

    image.png

    双击图中给的网页

    image.png

    可能是因为没json插件的原因

    接下来的教程是:

    image.png

    但是我的报错

    image.png

    image.png

    补充headers

    image.png

    这次是打开XHR单击网址,点击header 往下找headers然后有一个

    image.png

    复制下来就好

    但是这样我的解决失败了

    image.png

    查看格式后发现不是json的格式“”:“”

    找到错误了

    image.png

    其实是因为我之前填的这个url不对,应该是双击之后出现的网页,也就是这个的网页

    image.png

    image.png

    然后就成功啦、

    最后总结一下所有的代码

    import requests

    from lxml import etree

    url='https://movie.douban.com/subject/27133303/' #输入我们的url

    header = {"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36"}

    get = requests.get(url,headers=header).text # get(url) 得到我们的网页, text将源网页转化为字符串

    selector = etree.HTML(get) # 将源码转换为xpath可以识别的TML格式

    info = {} #字典用于储存信息

    info['电影'] = selector.xpath('//title/text()')[0].strip() # 定位电影名字

    info['导演']=selector.xpath('//a[@rel="v:directedBy"]/text()') # 定位导演名字

    info['演员']=selector.xpath('//a[@rel="v:starring"]/text()') # 定位演员名字

    print(info)

    #json

    #

    import json

    import requests

    url='https://movie.douban.com/j/new_search_subjects?sort=U&range=0,10&tags=&start=0'

    header = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.67 Safari/537.36 Edg/87.0.664.52"}

    get = requests.get(url=url,headers=header).json() #用json()函数得到网页源码

    #print(get)

    #print('**********************************')

    #print(get.text)

    get = get['data']

    info = {}

    for i in range(len(get)):

    info[get[i]['title']] = [get[i]['directors'], get[i]['rate'] ] #提取每部电影的导演和评分

    print(info)

    end

    展开全文
  • 如何用最高效快捷方式提取网页链接地址,这正是本文所要探讨。 提取网页链接地址有多种方式。在VS.NET开发环境下,总是通过两种方式: 一.用AxWebBrowser控件。等网页加载完,然后提取其中链接。 二....
    题记提取网页链接有什么用?比如,你可以做网页地址搜集器,邮件地址搜集器,图片或Flash搜集器等等。如何用最高效快捷的方式提取网页中的链接地址,这正是本文所要探讨的。
      

      取网页链接地址有多种方式。在VS.NET开发环境下,总的是通过两种方式:
       一.用AxWebBrowser控件。等网页加载完,然后提取其中的链接。
       二.不用AxWebBrowser控件的方式,先取得网页源代码,然后提取其中的链接。
       本人早先是用第一种方式,第一种方式要先等网页加载完毕,浏览器会下载许多无关的内容,速度较慢。因此,推荐用本文介绍的方式,用HttpWebRequest结合正则表达式取得网页中的链接。
      本文分以下几个步骤:
       用HttpWebRequest取得网页源代码
       用正则表达式取得链接地址
       去除重复地址
       保存为XML

                  用HttpWebRequest取得网页源代码     
      

    Dim url As String="http://sunhai.tianyablog.com" ' 这是我的小站,有空来坐坐
    Dim httpReq As System.Net.HttpWebRequest  
    Dim httpResp As System.Net.HttpWebResponse
    Dim httpURL As New System.Uri(url)
    httpReq = CType(WebRequest.Create(httpURL), HttpWebRequest)
    httpReq.Method = "GET"
    httpResp = CType(httpReq.GetResponse(), HttpWebResponse)
    httpReq.KeepAlive = False ' 获取或设置一个值,该值指示是否与 Internet 资源建立持久连接。

    Dim reader As StreamReader = _
    New StreamReader(httpResp.GetResponseStream, System.Text.Encoding.GetEncoding("GB2312"))
    Dim respHTML As String = reader.ReadToEnd() 'respHTML就是网页源代码

      是不是很简单?
      对于概念的理解,在MSDN中有极详细的介绍,请在VS.NET 2003中点击“帮助”,再点击“搜索”,然后输入类名,如HttpWebRequest,一回车,就什么资料都有了。对于下面碰到的编程概念,如有不理解的,也请先搜索MSDN,不再重复说明。


                用正则表达式取得链接地址

    Dim strRegex As String = "http://([/w-]+/.)+[/w-]+(/[/w- ./?%&=]*)?" '这就是表达式
    Dim r As System.Text.RegularExpressions.Regex
    Dim m As System.Text.RegularExpressions.MatchCollection
    r = New System.Text.RegularExpressions.Regex(strRegex, System.Text.RegularExpressions.RegexOptions.IgnoreCase)   
    m = r.Matches(respHTML)
    Dim i As Integer
    For i = 0 To m.Count - 1
         form1.DefInstance.ListBox1.Items.Add(m(i).Value) 'form1.DefInstance是form1的共享属性和实例
    Next i  
    form1.DefInstance.ListBox.Visible = True ' 设置ListBox为可见
    form1.DefInstance.ListBox.Sorted = True ' 对ListBox各元素进行排序

    form1.DefInstance.ListBox1.Items.Add(m(i).Value) 'form1.DefInstance是form1的共享属性和实例, 共享成员如果是方法或属性,我们不用创建实例就可以直接用‘类名 .共享成员'的方法进行调用。设置方法如下:

    Private Shared m_vb6FormDefInstance As form1
    Public Shared Property DefInstance() As form1
      Get
        If m_vb6FormDefInstance Is Nothing OrElse m_vb6FormDefInstance.IsDisposed Then '判断窗体实例是否存在
          m_vb6FormDefInstance = New form1
        End If
        DefInstance = m_vb6FormDefInstance
      End Get
      Set(ByVal Value As form1)
        m_vb6FormDefInstance = Value
      End Set
    End Property




                    去除重复地址

    Dim countForms As Integer '以下代码去除重复地址
    Dim lstForms() As String
    Dim CurId As Integer
    With formBrow.DefInstance.ListBox1
      ReDim Preserve lstForms(0)
      lstForms(0) = .Items(0) '新数组的第一项和list的第一项相同
      For countForms = 1 To .Items.Count - 1 'items.count得到list1中的项目数
        CurId = UBound(lstForms) 'curid为newlist中有项目数
        If .Items(countForms) <> lstForms(CurId) Then '如果旧表第二项不等于新表最大项
          ReDim Preserve lstForms(CurId + 1) '定位到新表第二项
          lstForms(CurId + 1) = .Items(countForms) '新表第二项等于旧表第二项
        End If
      Next countForms
      .Ite ms.Clear() '删除旧表所有项
      For countForms = 0 To UBound(lstForms) '把新表写入旧表
        .Items.Add(lstForms(countForms))
      Next countForms
    End With


               把地址导出为XML

      
    可扩展标记语言 (XML) 是一种提供数据描述格式的标记语言。该语言使跨越多个平台进行更准确的内容声明和获得更有意义的搜索结果变得更加容易。此外,XML 实现了表示与数据的分离。例如,在 HTML 中,使用标记来告诉浏览器将数据显示为粗体或斜体;而在 XML 中,标记只用于描述数据,例如城市名、温度和大气压。在 XML 中,使用样式表(例如,可扩展样式表语言 (XSL) 和层叠样式表 (CSS))在浏览器中显示数据。XML 使数据与表示及处理分离开来,通过应用不同的样式表和应用程序,使您能够根据需要显示和处理数据。

      XML 是为在 Web 上传送而进行优化了的 SGML 的子集。它是由万维网联合会 (W3C) 定义的。该标准化确保了结构化数据的统一性和相对于应用或供应商的独立性。

      XML 是 Visual Studio .NET 和 .NET Framework 的很多功能的核心。XML 是可用于许多不同应用程序的格式,我们可将搜集到的链接保存为XML。
      
    XmlTextWriter 是 XmlWriter 类的实现,该类提供将 XML 写入文件、流或 TextWriter 的 API。该类有许多验证和检查规则,以确保所编写的 XML 的格式正确。当与某些规则发生冲突时,将会引发异常,并且这些异常应该被捕获。XmlTextWriter 有不同的构造函数,每个函数指定写入 XML 数据的不同类型的位置。下面代码使用的是将 XML 写入文件的构造函数。
       首先使用 Formatting 属性指定正被编写的 XML 数据的格式。通过将此属性设置为 Indented,编写器使用 Indentation 和 IndentChar 属性缩进子元素。
       代码显示了与每个 XML 节点类型相对应的 XML 编写方法。例如,编写一个元素将调用 WriteElementString 方法,编写一个属性将调用 WriteAttributeString 方法。对于嵌套级别,可以使用 WriteStartElement/WriteEndElement 对;如果要创建较复杂的属性,则可以使用 WriteStartAttribute/WriteEndAttribute 对。
      
    请注意代码如何使用 WriteStartDocument 方法编写带版本号“1.0”的 XML 声明。如果要让编写器检查该文档的格式是否正确(先是 XML 声明,序言中的 DOCTYPE,只有一个根级别元素,等等),您必须在调用任何其他编写方法之前,调用此可选的 WriteStartDocument 方法。接着,此代码调用 WriteDocType 方法编写名为“urls”的文档类型。WriteDocType 调用中的第三个参数指定编写器将编写 SYSTEM“urls.dtd”。编写完成后,XML 文件指示有一个要根据其进行验证的外部 DTD。

      最后,代码调用 Flush 方法将 XML 数据保存到文件,然后才调用 Close 方法。(虽然此示例确实只需要 Close 方法,但是也存在这样的情况,即需要保存所生成的 XML,并且需要重复使用编写器。)

      要检查 XmlTextWriter 的输出,可通过用 XmlTextReader 读取生成的文件来执行往返测试,以验证 XML 的格式是正确的。

    Private Sub saveXml()
      Dim saveFileDialog1 As New SaveFileDialog
      saveFileDialog1.Filter = "xml|*.xml"
      saveFileDialog1.Title = "Save a xml File"
      saveFileDialog1.ShowDialog()
      If saveFileDialog1.FileName <> "" Then  '如果文件名不等于空白
        Dim fileName As String = saveFileDialog1.FileName  
        If Not System.IO.File.Exists(fileName) Then  '如果不存在同名文件

          Dim myXmlTextWriter As XmlTextWriter = New XmlTextWriter(fileName, Nothing)
          myXmlTextWriter.Formatting = System.Xml.Formatting.Indented  '设置缩进
          myXmlTextWriter.WriteStartDocument(False)
          myXmlTextWriter.WriteDocType("urls", Nothing, "urls.dtd", Nothing)
          myXmlTextWriter.WriteComment("This file save the Urls")  '注释
          myXmlTextWriter.WriteStartElement("urls")      '开始元素
          myXmlTextWriter.WriteStartElement("url1", Nothing)  '开始元素
          myXmlTextWriter.WriteAttributeString("now", Now)   '在属性里记录时间
          For countAll As Integer = 0 To ListBox1.Items.Count - 1
            Dim title As String = Strings.Right(ListBox1.Items.Item(countAll), 3)  '取URL后三字
            Dim body As String = lstMuLu.Items.Item(countAll)       
            myXmlTextWriter.WriteElementString(title, Nothing, body)
          Next
          myXmlTextWriter.WriteEndElement()   
          myXmlTextWriter.WriteEndElement()

          'Write the XML to file and close the myXmlTextWriter
          myXmlTextWriter.Flush()
          myXmlTextWriter.Close()

         End  If
      End If
    End Sub


                软件开发,创意是灵魂

     
     
    在软件开发实践中,真正让我们感到贫乏的,永远不会是技术,而是创意。
       创意,是软件开发的灵魂。
       随着开发工具的升级,进化,软件开发越来越象搭积木。我们更多的是学习开发工具的使用,而不是自己编写底层代码——许多底层代码,开发工具已经为我们代劳了。
      
    这么说并不是我对软件开发有多精通。事实上,我从2003年10月开始自学编程(VB6),11月转到VS.NET。2004年1月,完成我的第一个软件AdKing
      
    只要学习方法得当,掌握技术并不是难事。这在我的第一篇VS.NET文章《VS.NET学习方法论》中有所论述。
      每个搞软件开发的人不妨自问一下(自然包括我了),自己在软件开发中的创意如何?你能保证通过你的创意已经把你所掌握的技术发挥得淋漓尽致了吗?你在每天大量编写CODE的同时,有多少时间用于思考创意?

      
    以本文代码举例,发挥您的创意,可以编写多少个应用软件?
       这么说,并不是要您编写多少个应用软件。
       您能列出大量软件项目、方案,自然能从中挑选出适合您的最佳方案。
       一即是多。
       磨刀不误砍柴工。
       以《用正则表达式取得链接地址》为例,只要灵活改变strRegex表达式的值,我们可以从网页源代码中任意提取我们想要的东东。如果你要开发邮件地址搜集器,strRegex = " [/w-]+@([/w-]+/.)+[/w-]+ " 即可。如果要搜集Flash呢?
       如果您能列出50种方案,请来信告诉我。如果你列出的方案比我多,I fu le u,我拜您为师。 

    展开全文
  • Java从网络取得文件 1个目标文件 简单 Java从压缩包中提取文件 1个目标文件 简单 Java存储与读取对象 1个目标文件 如题 Java调色板面板源代码 1个目标文件 摘要:Java源码,窗体界面,调色板 使用Java语言编写一款...
  • java范例开发大全源代码

    热门讨论 2011-10-30 23:31:51
     实例168 如何访问同名方法或变量 268  实例169 super()方法使用 271  实例170 this方法使用 274  实例171 一张考试成绩单 275  实例172 银行自动存取一体机 278  9.4 多态 284  实例173 ...
  • java爬取猫咪上的图片

    2019-07-29 22:12:00
    1.用到获取网页源代码,分析图片地址,发现图片的地址都是按编号排列的,所以想到循环获取 2.保存图片要用到流操作和文件操作,对两部分知识进行了复习巩固 3.保存后的图片有一部分是广告文字,所以我又看了一下...

    首先是对知识点归纳

    1.用到获取网页源代码,分析图片地址,发现图片的地址都是按编号排列的,所以想到用循环获取

    2.保存图片要用到流操作和文件操作,对两部分知识进行了复习巩固

    3.保存后的图片有一部分是广告文字,所以我又看了一下如何截取图片

    下面上代码:

    网页源代码不粘贴了

    对网页源代码分析之后进行循环提取图片链接并下载:

      1 package 文件操作;
      2 
      3 import java.io.ByteArrayOutputStream;
      4 import java.io.File;
      5 import java.io.FileOutputStream;
      6 import java.io.IOException;
      7 import java.io.InputStream;
      8 import java.net.HttpURLConnection;
      9 import java.net.MalformedURLException;
     10 import java.net.URL;
     11 
     12 public class Pic696 {
     13 
     14     public static void main(String[] args) {
     15     for(int i =1;i<72;i++) {
     16         for (int j =1; j < 50; j++) {
     17 
     18             if(i<10&&j<10) {
     19                 String strUrl ="https://mmslt1.com/tp/girl/FEILIN/A-00"+i+"/0"+j+".jpg";
     20 //                System.out.println(i+" "+j);
     21                 System.out.println(strUrl);
     22                 URL url;
     23                 try {
     24                     url = new URL(strUrl);
     25                     try {
     26                         Pig(url, i, j);
     27                     } catch (IOException e) {
     28                         System.out.println("404");
     29                     }
     30                 } catch (MalformedURLException e) {
     31                     
     32                 }
     33                 
     34             }
     35             if(i<10&&j>=10) {
     36                 String strUrl ="https://mmslt1.com/tp/girl/FEILIN/A-00"+i+"/"+j+".jpg";
     37 //                System.out.println(i+" "+j);
     38                 System.out.println(strUrl);
     39                 URL url;
     40                 try {
     41                     url = new URL(strUrl);
     42                     try {
     43                         Pig(url, i, j);
     44                     } catch (IOException e) {
     45                         System.out.println("404");
     46                     }
     47                 } catch (MalformedURLException e) {
     48                     // TODO Auto-generated catch block
     49                     e.printStackTrace();
     50                 }
     51                 
     52             }
     53             if(i>=10&&j<10) {
     54                 String strUrl ="https://mmslt1.com/tp/girl/FEILIN/A-0"+i+"/0"+j+".jpg";
     55 //                System.out.println(i+" "+j);
     56                 System.out.println(strUrl);
     57                 URL url;
     58                 try {
     59                     url = new URL(strUrl);
     60                     try {
     61                     Pig(url, i, j);
     62                 } catch (IOException e) {
     63                     System.out.println("404");
     64                 }
     65                 } catch (MalformedURLException e) {
     66                     // TODO Auto-generated catch block
     67                     e.printStackTrace();
     68                 }
     69                 
     70             }
     71             if(i>=10&&j>=10) {
     72             String strUrl ="https://mmslt1.com/tp/girl/FEILIN/A-0"+i+"/"+j+".jpg";
     73 //            System.out.println(i+" "+j);
     74             System.out.println(strUrl);
     75             URL url;
     76             try {
     77                 url = new URL(strUrl);
     78                 try {
     79                 Pig(url, i, j);
     80             } catch (IOException e) {
     81                 System.out.println("404");
     82             }
     83             } catch (MalformedURLException e) {
     84                 // TODO Auto-generated catch block
     85                 e.printStackTrace();
     86             }
     87             
     88             }
     89         }
     90     }
     91             
     92 }
     93     
     94     static void Pig(URL urlStr,int i,int j) throws IOException {
     95         //构造连接
     96         HttpURLConnection conn = (HttpURLConnection)urlStr.openConnection();
     97         conn.setRequestMethod("GET");
     98         //这个网站要模拟浏览器才行
     99         conn.setRequestProperty("User-Agent","Mozilla/5.0 (Windows NT 10.0; WOW64; rv:46.0) Gecko/20100101 Firefox/46.0");
    100         //打开连接
    101         conn.connect();
    102 
    103         //打开这个网站的输入流
    104         InputStream inStream = conn.getInputStream();
    105         //用这个做中转站 ,把图片数据都放在了这里,再调用toByteArray()即可获得数据的byte数组
    106         ByteArrayOutputStream outStream = new ByteArrayOutputStream();
    107         //用这个是很好的,不用一次就把图片读到了文件中
    108         //要是需要把图片用作其他用途呢?所以直接把图片的数据弄成一个变量,十分有用
    109         //相当于操作这个变量就能操作图片了
    110 
    111         byte [] buf = new byte[1024];
    112         //为什么是1024?
    113         //1024Byte=1KB,分配1KB的缓存
    114         
    115         int len = 0;
    116 
    117         //读取图片数据
    118         while((len=inStream.read(buf))!=-1){
    119 //        System.out.println(len);
    120         outStream.write(buf,0,len);
    121         }
    122         inStream.close();
    123         outStream.close();
    124 
    125         //把图片数据填入文件中
    126 //        File files = new File("E://Pic696");
    127 //        files.mkdirs();
    128         File file = new File("E://Pic696/Pic"+i+"_"+j+".jpg");
    129 
    130         FileOutputStream op = new FileOutputStream(file);
    131 
    132         op.write(outStream.toByteArray());
    133 
    134         op.close();
    135      }    
    136 }

    对下载下来的图片进行截取(获取原来的尺寸,减掉一部分)

     1 package 文件操作;
     2 
     3 import java.awt.Rectangle;
     4 import java.awt.image.BufferedImage;
     5 import java.io.BufferedReader;
     6 import java.io.File;
     7 import java.io.FileInputStream;
     8 import java.io.IOException;
     9 import java.io.InputStream;
    10 import java.io.InputStreamReader;
    11 import java.net.MalformedURLException;
    12 import java.net.URL;
    13 import java.util.Iterator;
    14 
    15 import javax.imageio.ImageIO;
    16 import javax.imageio.ImageReadParam;
    17 import javax.imageio.ImageReader;
    18 import javax.imageio.stream.ImageInputStream;
    19 import javax.swing.ImageIcon;
    20 
    21 
    22 
    23 public class cityScore {
    24  
    25     public static void main(String[] args) {
    26         for (int i = 1; i < 10; i++) {
    27             for (int j = 1; j < 40; j++) {
    28                 String OldPic ="E:/Pic696/Pic"+i+"_"+j+".jpg";
    29                 String NewPic ="E:/Pic696/new/Pic"+i+"_"+j+".jpg";
    30                 ImageIcon imageIcon = new ImageIcon(OldPic);
    31                 int iconWidth = imageIcon.getIconWidth();
    32                 int iconHeight =imageIcon.getIconHeight();
    33                 cutImage(OldPic, NewPic,iconWidth, iconHeight-70);
    34             }
    35         }
    36         
    37     }
    38     
    39     /**
    40      * 图片裁剪
    41      * @param srcImageFile 图片裁剪地址
    42      * @param result 图片输出文件夹
    43      * @param destWidth 图片裁剪宽度
    44      * @param destHeight 图片裁剪高度
    45      */
    46     public final static void cutImage(String srcImageFile, String result,
    47             int destWidth, int destHeight) {
    48         try {
    49             Iterator iterator = ImageIO.getImageReadersByFormatName("JPEG");/*PNG,BMP*/  
    50             ImageReader reader = (ImageReader)iterator.next();/*获取图片尺寸*/
    51             InputStream inputStream = new FileInputStream(srcImageFile); 
    52             ImageInputStream iis = ImageIO.createImageInputStream(inputStream);  
    53             reader.setInput(iis, true);  
    54             ImageReadParam param = reader.getDefaultReadParam();  
    55             Rectangle rectangle = new Rectangle(0,0, destWidth, destHeight);/*指定截取范围*/   
    56             param.setSourceRegion(rectangle);  
    57             BufferedImage bi = reader.read(0,param);
    58             ImageIO.write(bi, "JPEG", new File(result));
    59         } catch (Exception e) {
    60             System.out.println(e);
    61         }
    62     }
    63 }

     

    转载于:https://www.cnblogs.com/fangmr/p/11266873.html

    展开全文
  • 春节快乐在PHP进行抓取时一般都是利用PHP模拟浏览器访问,通过http请求访问url地址, 然后得到html源代码或者xml数据,得到数据我们不能直接输出,往往需要对内容进行提取,然后再进行格式化,以更加友好方式...

    春节快乐

    在PHP进行抓取时一般都是利用PHP模拟浏览器的访问,通过http请求访问url地址, 然后得到html源代码或者xml数据,得到数据我们不能直接输出,往往需要对内容进行提取,然后再进行格式化,以更加友好的方式显现出来。一、基本原理通常使用的方法有file_get_contents和curl,区别简单陈述如下:1. curl多用于互联网网页之间的抓取,而file_get_contents多用于获取静态页面的内容。

    2. file_get_contents 每次请求都会重新做DNS查询,并不对DNS信息进行缓存。但是CURL会自动对DNS信息进行缓存。对同一域名下的网页或者图片的请求只需要一次DNS查询。这大大减少了DNS查询的次数。所以CURL的性能比file_get_contents 好很多。

    3. file_get_contents在请求HTTP时,不会keeplive,而curl却可以。这样在多次请求多个链接时,curl效率会好一些。

    4. curl支持很多协议,有FTP, FTPS, HTTP, HTTPS, GOPHER, TELNET, DICT, FILE以及LDAP,也就是说,它能做到很多file_get_content做不到的事情。curl在php可以实现远程获取和采集内容;实现PHP网页版的FTP上传下载;实现模拟登陆;实现接口对接(API),数据传输;实现模拟Cookie;下载文件断点续传等等,功能十分强大。

    5. file_get_contents函数会受到php.ini文件中allow_url_open选项配置的影响。如果该配置关闭了,则该函数也就失效了。而curl不受该配置的影响。

    二、图片抓取此处以file_get_contents做示例抓取某国内新闻网新闻列表缩略图。页面及相关html源码如下:首先我们通过file_get_contents获得页面html完整源码并进行正则匹配,匹配出所有img标签的src属性值,也就是我们要获取的目标:这样上述代码中的$matches中就存储了所有匹配出来的img的src属性值,然后通过循环下载保存至本地即可:

    三、通过PHP调用wget抓取上述代码已经展示了一个基本的图片抓取方法,但是当目标图片普遍较大(如壁纸类图片)且网速受限不稳定时,可以不使用PHP进行下载转而调用linux系统下的wget命令,具体示例代码如下:图片抓取只是PHP网络爬虫能做到的很小一部分功能,通过PHP网络爬虫可以方便的获取互联网上更多的数据,无论是用于数据挖掘还是市场调研,甚至是制作搜索引擎。

    ymkj_02418640029679每个有梦想的品牌都值得我们倾情助力

    本文转载于微信公众号: 辽宁禹铭科技(ymkj_024),更多微信文章请扫描关注公众号:

    Tag标签:

    展开全文
  • Java范例开发大全 (程序)

    热门讨论 2011-04-27 07:47:22
     实例168 如何访问同名方法或变量 268  实例169 super()方法使用 271  实例170 this方法使用 274  实例171 一张考试成绩单 275  实例172 银行自动存取一体机 278  9.4 多态 284  实例173 饮食...
  • 爬虫基本原理详解

    千次阅读 2018-02-25 08:34:03
    爬虫的定义:请求网站并提取数据的自动化程序put请求的参数会包含在url中,而post则不会响应体...库得到的是网页的源代码,而浏览器(elements)中,显示的是经过js渲染的怎样解决JavaScript渲染的问题?怎样保存数据?...
  • 爬虫基本流程

    千次阅读 2018-02-26 12:53:18
    爬虫的定义:请求网站并提取数据的自动化程序put请求的参数会包含在url中,而post则不会响应体...库得到的是网页的源代码,而浏览器(elements)中,显示的是经过js渲染的怎样解决JavaScript渲染的问题?怎样保存数据?...
  • java源码包---java 源码 大量 实例

    千次下载 热门讨论 2013-04-18 23:15:26
     Java生成密钥、保存密钥实例源码,通过本源码可以了解到Java如何产生单钥加密密钥(myKey)、产生双钥密钥对(keyPair)、如何保存公钥字节数组、保存私钥到文件privateKey.dat、如何用Java对象序列化保存私钥...
  • java源码包2

    千次下载 热门讨论 2013-04-20 11:28:17
     Java生成密钥、保存密钥实例源码,通过本源码可以了解到Java如何产生单钥加密密钥(myKey)、产生双钥密钥对(keyPair)、如何保存公钥字节数组、保存私钥到文件privateKey.dat、如何用Java对象序列化保存私钥...
  • java源码包3

    千次下载 热门讨论 2013-04-20 11:30:13
     Java生成密钥、保存密钥实例源码,通过本源码可以了解到Java如何产生单钥加密密钥(myKey)、产生双钥密钥对(keyPair)、如何保存公钥字节数组、保存私钥到文件privateKey.dat、如何用Java对象序列化保存私钥...
  • java源码包4

    千次下载 热门讨论 2013-04-20 11:31:44
     Java生成密钥、保存密钥实例源码,通过本源码可以了解到Java如何产生单钥加密密钥(myKey)、产生双钥密钥对(keyPair)、如何保存公钥字节数组、保存私钥到文件privateKey.dat、如何用Java对象序列化保存私钥...
  • Java从网络取得文件 1个目标文件 简单 Java从压缩包中提取文件 1个目标文件 简单 Java存储与读取对象 1个目标文件 如题 Java调色板面板源代码 1个目标文件 摘要:Java源码,窗体界面,调色板 使用Java语言编写一款...
  • Java从网络取得文件 1个目标文件 简单 Java从压缩包中提取文件 1个目标文件 简单 Java存储与读取对象 1个目标文件 如题 Java调色板面板源代码 1个目标文件 摘要:Java源码,窗体界面,调色板 使用Java语言编写一款...
  • JAVA上百实例源码以及开源项目

    千次下载 热门讨论 2016-01-03 17:37:40
     Java生成密钥、保存密钥实例源码,通过本源码可以了解到Java如何产生单钥加密密钥(myKey)、产生双钥密钥对(keyPair)、如何保存公钥字节数组、保存私钥到文件privateKey.dat、如何用Java对象序列化保存私钥...
  • 问题12 如何抓取网页的图片 103 第2章 文件I/O 104 2.1 知识点归纳 104 2.1.1 高级文件I/O操作 104 2.1.2 低级文件I/O操作 121 2.2 重难点讲解 134 2.2.1 二进制文件与文本文件 134 2.2.2 sprintf与...
  • vc++ 应用源码包_1

    热门讨论 2012-09-15 14:22:12
    FlashPlayer播放器4.0VC++源代码 FreeBird2011最初版(模仿飞鸽,可聊天+传文件) 该实例可进行局域网聊天、一对多、多对一、和多对多传送和续传,理论上这是我本人实现目的,而且目前经测试已基本实现了...
  • asp.net知识库

    2015-06-18 08:45:45
    在Asp.net中如何用SQLDMO来获取SQL Server中对象信息 使用Relations建立表之间关系并却使用PagedDataSource类对DataList进行分页 通过作业,定时同步两个数据库 SQLSERVER高级注入技巧 利用反射实现ASP.NET控件和...
  • vc++ 应用源码包_2

    热门讨论 2012-09-15 14:27:40
    FlashPlayer播放器4.0VC++源代码 FreeBird2011最初版(模仿飞鸽,可聊天+传文件) 该实例可进行局域网聊天、一对多、多对一、和多对多传送和续传,理论上这是我本人实现目的,而且目前经测试已基本实现了...
  • vc++ 应用源码包_6

    热门讨论 2012-09-15 14:59:46
    FlashPlayer播放器4.0VC++源代码 FreeBird2011最初版(模仿飞鸽,可聊天+传文件) 该实例可进行局域网聊天、一对多、多对一、和多对多传送和续传,理论上这是我本人实现目的,而且目前经测试已基本实现了...
  • vc++ 应用源码包_5

    热门讨论 2012-09-15 14:45:16
    FlashPlayer播放器4.0VC++源代码 FreeBird2011最初版(模仿飞鸽,可聊天+传文件) 该实例可进行局域网聊天、一对多、多对一、和多对多传送和续传,理论上这是我本人实现目的,而且目前经测试已基本实现了...
  • vc++ 应用源码包_4

    热门讨论 2012-09-15 14:38:35
    FlashPlayer播放器4.0VC++源代码 FreeBird2011最初版(模仿飞鸽,可聊天+传文件) 该实例可进行局域网聊天、一对多、多对一、和多对多传送和续传,理论上这是我本人实现目的,而且目前经测试已基本实现了...
  • vc++ 应用源码包_3

    热门讨论 2012-09-15 14:33:15
    FlashPlayer播放器4.0VC++源代码 FreeBird2011最初版(模仿飞鸽,可聊天+传文件) 该实例可进行局域网聊天、一对多、多对一、和多对多传送和续传,理论上这是我本人实现目的,而且目前经测试已基本实现了...
  • vc++ 开发实例源码包

    2014-12-16 11:25:17
    FlashPlayer播放器4.0VC++源代码 如题。 FreeBird2011最初版(模仿飞鸽,可聊天+传文件) 该实例可进行局域网聊天、一对多、多对一、和多对多传送和续传,理论上这是我本人实现目的,而且目前经测试已基本...
  • 100《Volume master》完美控制每个网页的音量 099《Get Favicon》一键获取网站的超清图标 098《RSSHub Radar》可以帮助你快速发现和订阅当前网站RSS的浏览器扩展 097《假装水墨屏》让网页内容变成水墨屏效果 ...
  • 实例289 如何图片从数据库中提取出来 380 实例290 原生ADO应用技术 381 实例291 标准记录编辑界面 383 实例292 获取驱动列表并加载指定驱动 385 实例293 获取驱动所支持表名 387 实例294 创建表和...
  • 实例054 如何关闭mdi类型窗体中子窗体 65 实例055 利用组件模板实现窗体资源重复利用 66 第2章 控件应用 69 2.1 tedit控件应用典型实例 70 实例056 从右至左输入数据 70 实例057 为tedit控件...

空空如也

空空如也

1 2 3
收藏数 50
精华内容 20
关键字:

如何用源代码提取网页的图片