目录
1.首先
2.什么是网络爬虫?
3. 常用爬虫框架
3.1.Java框架
3.1.1、网络魔法
3.1.2、J汤
3.1.3、HTTP客户端
3.1.4、爬虫4j
3.1.5、HTML单元
3.1.6、硒
3.2.Python 框架
3.2.1.痒病
3.2.2. 美丽的汤+请求
3.2.3、硒
3.2.4、PyQuery
3.2.5、PySpider
3.2.6、波西亚
3.2.7、报纸
3.2.8、克劳利
3.2.9、抓取
3.2.10、Python-Goose
3.2.11、可乐
4. 爬虫策略
1、前言
网络爬虫技术在信息时代的大数据时代变得越来越重要。它是一种从互联网获取数据的技术,广泛应用于搜索引擎、数据挖掘、商业智能等领域。
2、什么是网络爬虫
网络爬虫(英文:web Roller),也称为网络蜘蛛,是一种用于自动浏览万维网的网络机器人。其目的通常是编译网络索引。网络爬虫通常是专门设计用于浏览和抓取互联网上的网络信息的自动化程序或脚本。网络爬虫的主要目的是从网络上的各种网站、页面或资源收集数据。它是搜索引擎、数据挖掘、内容聚合和其他信息检索任务的关键组件。
网络爬虫的工作方式与人类在互联网上浏览网页的方式相同,但它们可以更快、更大规模、更一致地执行这些任务。网络爬虫的基本流程包括:
发送请求:爬虫向目标网站发送HTTP请求,请求特定的网页或资源。检索网页内容:爬虫接收服务器响应并检索网页的HTML 或其他相关内容。解析网页:爬虫使用解析器(例如HTML解析器)来分析网页的结构并提取必要的信息。数据存储:爬虫将提取的数据存储在本地数据库、文件或其他存储介质中。链接遍历:爬虫不断遍历网页内的链接,可能会递归地爬取更多页面。
网络爬虫在信息检索和数据分析中发挥着重要作用,但您应该谨慎合法使用,遵循网站爬行规则,尊重隐私和版权等法律和道德规范。
3、常见的爬虫框架
爬虫框架是用于开发网络爬虫的工具或软件框架。网络爬虫是一种自动浏览互联网并收集和提取感兴趣信息的程序。爬虫框架提供了一组工具和功能,可以简化爬虫开发过程并加快数据收集的效率。在这里,我们概述了一些流行的Java 和Python 爬虫框架。
3.1、java框架
3.1.1、WebMagic
WebMagic是一个基于Java的开源爬虫框架,支持注释和设计模式,以简化爬取任务的实现。官网地址:简介/WebMagic文档
WebMagic的整体架构:
这是一个简单的WebMagic 示例:
导入us.codecraft.webmagic.Page。
导入us.codecraft.webmagic.Site。
导入us.codecraft.webmagic.Spider。
导入us.codecraft.webmagic.processor.PageProcessor。
公共类MySpider 实现PageProcessor {;
私有站点site=Site.me().setRetryTimes(3).setSleepTime(1000);
@覆盖
public void process(Page page) {
//爬虫逻辑、页面内容提取等
}
@覆盖
公共站点getSite() {
返回站点。
}
公共静态无效主(字符串[] args){
Spider.create(new MySpider())
.addUrl(\’http://www.example.com\’)
。跑步();
}
}
3.1.2、Jsoup
Jsoup 是一个用于解析HTML 文档的Java 库,并提供类似jQuery 的API。官网地址:jsoup: Java HTML解析器。专为HTML 编辑、清理、抓取和XSS 安全而构建。
简单代码示例:
导入org.jsoup.Jsoup。
导入org.jsoup.nodes.Document。
导入org.jsoup.nodes.Element。
导入org.jsoup.select.Elements。
导入java.io.IOException;
公共类JsoupExample {
公共静态无效主(字符串[] args){
字符串URL=\’http://www.example.com\’;
尝试{
文档document=Jsoup.connect(url).get();
//爬虫逻辑、页面内容提取等
} catch(IOException e) {
e.printStackTrace();
}
}
}
3.1.3、HttpClient
Apache HttpClient 是一个用于发送HTTP 请求的Java 库,可用于创建简单的网络爬虫。下面是一个使用HttpClient实现的简单爬虫的示例代码。官网地址:概述(Apache HttpClient 5.2.3 API)
简单代码示例:
导入org.apache.http.HttpEntity。
导入org.apache.http.HttpResponse。
导入org.apache.http.client.HttpClient。
导入org.apache.http.client.methods.HttpGet。
导入org.apache.http.impl.client.HttpClients。
导入org.apache.http.util.EntityUtils。
导入java.io.IOException;
公共类SimpleHttpClientCrawler {
公共静态无效主(字符串[] args){
//创建一个HttpClient 实例
HttpClient httpClient=HttpClients.createDefault();
//指定要抓取的URL
字符串URL=\’http://www.example.com\’;
//发出HTTP GET 请求
HttpGet httpGet=new HttpGet(url);
尝试{
//执行请求并获取响应
HttpResponse 响应=httpClient.execute(httpGet);
//获取响应实体
HttpEntity实体=response.getEntity();
if (实体!=null) {
//将响应实体转换为字符串
字符串内容=EntityUtils.toString(entity);
System.out.println(内容);
}
} catch(IOException e) {
e.printStackTrace();
} 最后{
//关闭HttpClient连接
尝试{
httpClient.close();
} catch(IOException e) {
e.printStackTrace();
}
}
}
}
3.1.4、Crawler4j
Crawler4j是一个开源的Java类库,它提供了一个用于爬取网页的简单接口。您可以使用它来构建多线程网络爬虫。官网地址:GitHub – yasserg/crawler4j: Java 开源网络爬虫
下面是一个简单的示例代码。
公共类控制器{
公共静态无效主(字符串[] args)抛出异常{
StringcrawlStorageFolder=\’/data/crawl/root\’;
int 爬虫数量=7;
CrawlConfig 配置=new CrawlConfig();
config.setCrawlStorageFolder(crawlStorageFolder);
//实例化此抓取的控制器。
PageFetcher pageFetcher=new PageFetcher(config);
RobotstxtConfig robotstxtConfig=new RobotstxtConfig();
RobotstxtServer robotstxtServer=new RobotstxtServer(robotstxtConfig, pageFetcher);
CrawlController 控制器=new CrawlController(config, pageFetcher, robotstxtServer);
//对于每次抓取,都需要添加一些种子URL。这些是第一批。
//检索URL,爬虫开始跟踪链接。
//在这些页面上找到
controller.addSeed(\’https://www.ics.uci.edu/~lopes/\’);
controller.addSeed(\’https://www.ics.uci.edu/~welling/\’);
控制器.addSeed(\’https://www.ics.uci.edu/\’);
//创建爬虫实例的工厂。
CrawlController.WebCrawlerFactoryBasicCrawler 工厂=MyCrawler:new;
//开始抓取。这是一个块操作。也就是说,代码是
//仅当爬网完成后才会到达以下行。
控制器.start(工厂,爬虫数);
}
}
3.1.5、HtmlUnit
HtmlUnit是一个用于模拟浏览器行为的Java库,可用于抓取动态网页。它对HTML 文档进行建模并提供API,允许您调用页面、填写表单、单击链接等,就像在“普通”浏览器中一样。它具有非常好的JavaScript 支持(不断改进),并且还可以使用相当先进的AJAX 库来模拟Chrome、Firefox 或Internet Explorer,具体取决于所使用的配置。官网地址:HtmlUnit 欢迎来到HtmlUnit
简单代码示例:
导入com.gargoylesoftware.htmlunit.BrowserVersion。
导入com.gargoylesoftware.htmlunit.WebClient。
导入com.gargoylesoftware.htmlunit.html.HtmlPage。
公共类HtmlUnitExample {
公共静态无效主(字符串[] args){
尝试(WebClient webClient=new WebClient(BrowserVersion.CHROME)) {
//使用JavaScript 渲染打开页面
HtmlPage 页面=webClient.getPage(\’http://www.example.com\’);
//获取页面标题
字符串标题=page.getTitleText();
System.out.println(\’页面标题:\’ + title);
} catch (异常e) {
e.printStackTrace();
}
}
}
3.1.6、Selenium
Selenium 是一个网络工具
应用程序测试工具。 Selenium 测试直接在浏览器中运行,就像真正的用户一样。支持的浏览器包括IE(7、8、9、10、11)、Mozilla Firefox、Safari、Google Chrome、Opera、Edge 等。该工具的主要特点是: 测试与浏览器的兼容性—— 测试您的应用程序,看看它是否可以在不同的浏览器和操作系统下正常工作。测试系统功能—— 创建回归测试来验证软件功能和用户需求。支持自动记录动作并自动生成.Net、Java、Perl等多种语言的测试脚本。
它还可以用于抓取动态网页。官网地址:Selenium
简单代码示例:
导入org.openqa.selenium.WebDriver。
导入org.openqa.selenium.chrome.ChromeDriver。
公共类SeleniumExample {
公共静态无效主(字符串[] args){
//设置ChromeDriver路径
System.setProperty(\’webdriver.chrome.driver\’, \’/path/to/chromedriver\’);
//创建一个ChromeDriver实例
WebDriver 驱动程序=new ChromeDriver();
尝试{
//使用JavaScript 渲染打开页面
driver.get(\’http://www.example.com\’);
//获取页面标题
字符串标题=driver.getTitle();
System.out.println(\’页面标题:\’ + title);
} 最后{
//关闭浏览器窗口
驱动程序.quit();
}
}
}
3.2、Python框架
3.2.1、Scrapy
Scrapy是一个强大而灵活的开源爬虫框架,用于快速开发爬虫和数据提取工具。它提供了基于规则的爬行方法,支持分布式爬行,并拥有优秀的文档和活跃的社区。官网地址:GitHub-scrapy/scrapy: Scrapy是一个快速、高级的Python网络爬虫抓取框架。
简单代码示例:
进口痒病
类MySpider(scrapy.Spider):
名称=“我的蜘蛛”
start_urls=[\’http://www.example.com\’]
def 解析(自身,响应):
# 爬虫逻辑、页面内容提取等
通过
3.2.2、BeautifulSoup + Requests
BeautifulSoup是一个HTML解析库,而Requests是一个发送HTTP请求的库。它们经常一起使用以方便网页解析和数据提取。官网地址:Beautiful Soup 4.12.0 文档— Beautiful Soup 4.12.0 文档
简单代码示例:
导入请求
BeautifulSoup 从bs4 导入
网址=\’http://www.example.com\’
响应=request.get(url)
如果响应.状态代码==200:
汤=BeautifulSoup(response.text, \’html.parser\’)
# 爬虫逻辑、页面内容提取等
: 其他
print(f\’请求失败,状态码:{response.status_code}\’)
3.2.3、Selenium
与Java的Selenium类似,Python也支持这个库。它是一个浏览器自动化工具,可用于抓取动态网页并支持JavaScript渲染。它模拟浏览器中的用户交互,适用于一些需要模拟用户行为的场景。
简单代码示例:
从Selenium 导入网络驱动程序
网址=\’http://www.example.com\’
驱动程序=webdriver.Chrome()
驱动程序.get(url)
# 爬虫逻辑、页面内容提取等
驱动程序.quit()
3.2.4、PyQuery
PyQuery 是一个类似jQuery 的库,用于解析HTML 文档。它提供了简洁的API,使Python中的HTML解析更加方便。官网地址:pyqueryPyPI
简单代码示例:
从pyquery 将PyQuery 导入为pq
网址=\’http://www.example.com\’
文档=pq(url)
# 爬虫逻辑、页面内容提取等
3.2.5、PySpider
PySpider是一个使用Python语言开发的强大的分布式爬虫框架,专注于提供简单、灵活、强大、快速的爬虫服务。 PySpider支持分布式部署,具有高度可扩展性和高度可定制性。官网地址:简介-pyspider
简单代码示例:
从pyspider.libs.base_handler 导入*
类处理程序(BaseHandler):
抓取配置={
\’标头\’: {
\’用户代理\’ : \’Mozilla/5.0(Windows NT 10.0;Win64;x64)AppleWebKit/537.36(KHTML、Gecko 等)Chrome/91.0.4472.124 Safari/537.36\’
}
}
@每(分钟=24 * 60)
def on_start(自身):
self.crawl(\’https://movie.douban.com/top250\’,callback=self.index_page)
@config(年龄=10 * 24 * 60 * 60)
def Index_page(自身,响应):
分别为response.doc(\’div.item\’):
self.crawl(each(\’div.hd a\’).attr.href, 回调=self.detail_page)
next=response.doc(\’.next a\’).attr.href
self.crawl(下一步,回调=self.index_page)
@config(优先级=2)
def 详细信息页面(自我,响应):
返回{
\’url\’: 响应.url,
\’标题\’: response.doc(\’h1 span\’).text(),
\’Rating\’: response.doc(\’strong.ll.Rating number\’).text(),
\’覆盖\’: response.doc(\’img[rel=\’v:image\’]\’).attr.src,
}
3.2.6、Portia
Portia 是一个开源的可视化爬虫工具,用于从网站上提取结构化数据。它是 Scrapinghub 公司开发的一部分,旨在简化和加速网页数据抽取的过程,无需编写复杂的代码。官网地址:Getting Started — Portia 2.0.8 documentation
Python中安装Portia:
pip install portia
# 安装后直接启动
portia
它将在本地启动一个 Web 服务,并提供一个 web 页面来进行数据抽取的可视化操作。
3.2.7、Newspaper
Newspaper 是一个用于提取文章内容的 Python 库。它旨在帮助开发者从新闻网站和其他在线文章中提取有用的信息,例如标题、作者、正文内容等。Newspaper 的设计目标是易于使用且高效,适用于各种新闻网站和文章结构。官网地址:GitHub – codelucas/newspaper: newspaper3k is a news, full-text, and article metadata extraction in Python 3. Advanced docs:
安装newspaper3k
pip install newspaper3k
简单代码示例:
from newspaper import Article
# 输入文章的 URL
article_url = \’https://www.example.com/article\’
# 创建 Article 对象并下载文章内容
article = Article(article_url)
article.download()
# 解析文章内容
article.parse()
# 输出文章信息
print(\”Title:\”, article.title)
print(\”Authors:\”, article.authors)
print(\”Publish Date:\”, article.publish_date)
print(\”\\nArticle Content:\\n\”, article.text)
3.2.8、Crawley
Crawley可以高速爬取对应网站的内容,支持关系和非关系数据库,数据可以导出为JSON、XML等。Crawley 提供了非常强大和灵活的内容提取功能。它支持使用 CSS 选择器和 XPath 表达式从网页中提取所需的信息,使用 PyQuery 和 lxml 库进行解析。官网地址:Crawley’s Documentation — crawley v0.1.0 documentation
简单示例代码:
from crawley.crawlers import BaseCrawler
from crawley.scrapers import BaseScraper
from crawley.extractors import XPathExtractor
from models import *
class pypiScraper(BaseScraper):
#specify the urls that can be scraped by this class
matching_urls = [\”%\”]
def scrape(self, response):
#getting the html table
table = response.html.xpath(\”/html/body/div[5]/div/div/div[3]/table\”)[0]
#for rows 1 to n-1
for tr in table[1:-1]:
#obtaining the searched html inside the rows
td_updated = tr[0]
td_package = tr[1]
package_link = td_package[0]
td_description = tr[2]
#storing data in Packages table
Package(updated=td_updated.text, package=package_link.text, description=td_description.text)
class pypiCrawler(BaseCrawler):
#add your starting urls here
start_urls = [\”http://pypi.python.org/pypi\”]
#add your scraper classes here
scrapers = [pypiScraper]
#specify you maximum crawling depth level
max_depth = 0
#select your favourite HTML parsing tool
extractor = XPathExtractor
3.2.9、Grab
Grab 是一个用于编写网络爬虫的 Python 框架。它提供了一套强大而灵活的工具,使得爬取和处理网页变得更加容易。Grab 的设计目标是简化常见的爬虫任务,同时保持足够的灵活性来处理各种不同的网站结构。官网地址:http://docs.grablib.org/en/latest/#grab-spider-user-manual
简单示例代码:
from grab import Grab
# 创建 Grab 实例
g = Grab()
# 设置要抓取的 URL
url = \’https://www.example.com\’
g.go(url)
# 输出抓取的页面内容
print(\”Content of\”, url)
print(g.response.body)
3.2.10、Python-goose
python-goose 是一个轻量级的文章提取库,旨在从网页中提取文章内容。它使用类似于自然语言处理的技术来分析页面,提取标题、作者、正文等信息。官网地址:GitHub – grangier/python-goose: Html Content / Article Extractor, web scrapping lib in Python
简单示例代码:
from goose3 import Goose
# 创建 Goose 实例
g = Goose()
# 设置要提取的文章 URL
url = \’https://www.example.com/article\’
article = g.extract(url)
# 输出提取的信息
print(\”Title:\”, article.title)
print(\”Authors:\”, article.authors)
print(\”Publish Date:\”, article.publish_date)
print(\”\\nArticle Content:\\n\”, article.cleaned_text)
3.2.11、Cola
cola 是另一个用于提取文章内容的库,它使用机器学习技术,并具有可配置的规则引擎,可以适应不同的网站结构。cola 的目标是实现高准确性和高可用性。官网地址:GitHub – qinxuye/cola: A high-level distributed crawling framework.
简单示例代码:
from cola.extractors import ArticleExtractor
# 设置要提取的文章 URL
url = \’https://www.example.com/article\’
# 使用 ArticleExtractor 提取文章信息
article = ArticleExtractor().get_article(url)
# 输出提取的信息
print(\”Title:\”, article.title)
print(\”Authors:\”, article.authors)
print(\”Publish Date:\”, article.publish_date)
print(\”\\nArticle Content:\\n\”, article.text)
4、爬虫策略
爬虫策略是指在进行网络爬虫操作时制定的一系列规则和策略,用于规范爬取行为、保护被爬取网站和服务器、确保合法合规的数据采集。以下是一些常见的爬虫策略:
遵守 robots.txt 文件:robots.txt 是网站根目录下的一个文本文件,用于指示爬虫哪些页面可以爬取,哪些不可以。爬虫应该尊重 robots.txt 文件中的规定。设置合理的爬取速率:控制爬虫的爬取速率,以避免对目标服务器造成过大的负担。爬虫速度过快可能导致服务器负载过高,影响其他用户访问该服务器。使用合法的 User-Agent:设置合法的 User-Agent,模拟正常用户的请求。一些网站可能会禁止爬取行为,特别是对于没有合法 User-Agent 的爬虫。处理重试和错误: 确保爬虫能够正确处理页面请求失败、超时等情况,实现自动重试或记录错误信息。这可以提高爬虫的鲁棒性。爬取深度和范围控制:设置爬虫的爬取深度和范围,以限制爬取的页面数量。这有助于控制爬虫的规模,避免对目标站点的过度访问。使用代理IP池:使用代理服务器来隐藏真实 IP 地址,减少被封禁的风险。代理池可以轮流使用多个代理,避免单个 IP 被封锁。定时更新爬虫规则:定期检查目标网站的变化,更新爬虫规则,以适应网站结构的变化。这可以提高爬虫的稳定性和持久性。合法数据使用:爬取到的数据只能用于合法用途,不得用于侵犯隐私、侵权、非法竞争等违法活动。遵守法律法规,尊重网站的使用政策。尊重隐私和版权:避免爬取包含个人隐私信息的页面,不要违反版权法。在进行爬取时,要考虑到被爬取网站的合法权益。合理使用缓存:在适当的情况下使用缓存,避免频繁请求相同的页面,减轻服务器负担。
#以上关于00. 这里整理了最全的爬虫框架(Java + Python)的相关内容来源网络仅供参考,相关信息请以官方公告为准!
原创文章,作者:CSDN,如若转载,请注明出处:https://www.sudun.com/ask/92666.html