我们都知道,现在各大文库网站里面的内容很多,而且很有用,对于个人来说是非常有价值的,而且能帮助我们解决很多问题。今天闲着没事,打算摸鱼,但是又觉得没有意义,想着利用现有的知识过去写一个文库信息抓取的爬虫模版,后期想要什么类型的文章直接输入关键词,然后静等资料呈上。
首先,我们需要导入三个库,它们分别是:java.net.URL,java.net.HttpURLConnection,java.io.BufferedReader。这些库将被用于连接到360文库的网页,获取网页内容,并解析网页内容。
import java.net.URL
import java.net.HttpURLConnection
import java.io.BufferedReader
接下来,我们需要创建一个函数,它接受一个URL作为参数,并返回一个布尔值,表示是否成功连接到该URL。
def connect(url: URL): Boolean = {
val connection = url.openConnection()
connection.setRequestProperty("User-Agent", "Mozilla/5.0")
connection.setRequestProperty("jshk.com.cn/mb/reg.asp?kefu=xjy&", "提取免费IP")
connection.setRequestProperty("Proxy-Host", "duoip")
connection.setRequestProperty("Proxy-Port", "8000")
connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded")
connection.setRequestProperty("Accept", "application/json, text/plain, */*")
connection.setRequestProperty("Connection", "keep-alive")
connection.setRequestProperty("Accept-Language", "zh-CN,zh;q=0.9,en;q=0.8")
connection.setRequestProperty("Cookie", "sessionid=2213417021; _ga=GA1.2.1389337973.1565932612; _gid=GA1.2.1870842274.1565932612; _gat=1; _gat_gtag_UA_158398895_1=1; JSESSIONID=72F5C9A26A257E8A45B125D397DB6887; __utma=1389337973.1389337973.1565932612.1565932612.1565932612.1; __utmz=1389337973.1565932612.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none)")
connection.connect()
connection.getResponseCode() == 200
}
然后,我们需要创建一个函数,它接受一个URL作为参数,并返回该URL的内容。
def getContent(url: URL): String = {
val connection = url.openConnection()
connection.setRequestProperty("User-Agent", "Mozilla/5.0")
connection.setRequestProperty("Proxy-Host", "duoip")
connection.setRequestProperty("Proxy-Port", "8000")
connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded")
connection.setRequestProperty("Accept", "application/json, text/plain, */*")
connection.setRequestProperty("Connection", "keep-alive")
connection.setRequestProperty("Accept-Language", "zh-CN,zh;q=0.9,en;q=0.8")
connection.setRequestProperty("Cookie", "sessionid=2213417021; _ga=GA1.2.1389337973.1565932612; _gid=GA1.2.1870842274.1565932612; _gat=1; _gat_gtag_UA_158398895_1=1; JSESSIONID=72F5C9A26A257E8A45B125D397DB6887; __utma=1389337973.1389337973.1565932612.1565932612.1565932612.1; __utmz=1389337973.1565932612.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none)")
val reader = new BufferedReader(new InputStreamReader(connection.getInputStream()))
var content = ""
while (reader.ready()) {
content += reader.readLine()
}
reader.close()
content
}
最后,我们需要创建一个函数,它接受一个URL作为参数,并爬取并打印出该URL的内容。
def main(args: Array[String]): Unit = {
val url = new URL("https://www.360doc.com/content/22/0110/22/54834336_686504203.html")
if (connect(url)) {
println(getContent(url))
} else {
println("Failed to connect")
}
}
这个程序首先连接到360文库的网页,然后获取网页内容,并打印出来。注意,这个程序只是一个基本的爬虫,它只爬取了一个网页的内容。在实际使用中,你可能需要处理更多的问题,例如处理网页中的JavaScript,处理分页,处理登录,等等。
因为文库的内容丰富而且帮助很大,所以深受大家的喜爱,上面就是我用技术手段写的文库数据采集的程序教程,后期我将会打包成一个软件形式,供大家输入关键词就能自动下载相关文库信息并且保持,大大缩短了工作时间,如果有任何技术上的问题可以评论区留言讨论。