当前位置: 首页 > 科技观察

快速指南:如何创建基于Python的爬虫

时间:2023-03-18 23:53:43 科技观察

Web抓取的使用正在积极增加,尤其是在大型电子商务公司中,Web抓取是一种收集数据以进行竞争、分析竞争对手和研究新产品的方式.Web抓取是一种从网站中提取信息的方法。在本文中,学习如何创建基于Python的抓取工具。深入研究代码以了解其工作原理。在当今的大数据世界中,很难跟踪正在发生的一切。对于需要大量信息才能成功的企业来说,情况变得更加复杂。但首先,他们需要以某种方式收集这些数据,这意味着他们必须处理数以千计的资源。有两种收集数据的方法。您可以使用API媒体网站提供的服务,这是获取所有新闻的最佳途径。此外,API非常易于使用。不幸的是,并非每个网站都提供此服务。然后第二种方法仍然存在-网页抓取。什么是网页抓取?这是一种从网站中提取信息的方法。HTML页面只不过是嵌套标签的集合。这些标签形成某种树,其根在标签中,并将页面划分为不同的逻辑部分。每个标签都可以有自己的后代(孩子)和父母。例如,HTML页面树可能如下所示:要处理此HTML,您可以使用文本或树。绕过这棵树就是网络抓取。我们将在所有这些多样性中找到我们需要的节点并从中获取信息!这种方法侧重于将非结构化HTML数据转换为易于在数据库或工作表中使用的结构化信息。数据抓取需要机器人收集信息,通过HTTP或网络浏览器连接到互联网。在本指南中,我们将使用Python创建一个爬虫。我们需要做的:获取我们要从中抓取数据的页面的URL复制或下载此页面的HTML内容处理此HTML内容并获取我们需要的数据这个序列允许我们弹出我们想要的URL,获取HTML数据,并对其进行处理以接收所需的数据。但有时我们需要先进入网站,然后再去特定的URL接收数据。然后我们必须再添加一个步骤——登录站点。作为伙伴,我们将使用BeautifulSoup库来解析HTML内容并获取所有必需的数据。这是一个很棒的Python包,用于抓取HTML和XML文档。Selenium库将帮助我们使爬虫在一次会话中进入网站并转到所需的URL地址。SeleniumPython可以帮助您执行诸如单击按钮、键入内容等操作。让我们深入研究代码首先,让我们导入将要使用的库。#importlibraryfromseleniumimportwebdriverfrombs4importBeautifulSoup然后我们需要向浏览器的驱动程序展示Selenium如何启动网络浏览器(我们将在这里使用GoogleChrome)。如果我们不希望机器人显示网络浏览器的图形界面,Selenium将添加一个“headless”选项。没有图形界面(无头)的Web浏览器可以在与所有流行的Web浏览器非常相似的环境中自动管理网页。但在这种情况下,所有活动都通过命令行界面或使用网络通信进行。#chrome驱动路径chromedriver='/usr/local/bin/chromedriver'options=webdriver.ChromeOptions()options.add_argument('headless')#openaheadlessbrowserbrowser=webdriver.Chrome(executable_path=chromedriver,chrome_options=options)设置浏览安装后浏览器、安装库和创建环境,我们就可以开始使用HTML了。让我们转到输入页面,找到用户必须输入电子邮件地址和密码的标识符、类别或字段名称。#进入登录页面browser.get('http://playsports365.com/default.aspx')#按名称搜索标签email=browser.find_element_by_name('ctl00$MainContent$ctlLogin$_UserName')password=browser.find_element_by_name('ctl00$MainContent$ctlLogin$_Password')login=browser.find_element_by_name('ctl00$MainContent$ctlLogin$BtnSubmit')然后我们会将登录数据发送到这些HTML标记中。为此,我们需要按下操作按钮将数据发送到服务器。#Addlogincredentialsemail.send_keys('********')password.send_keys('********')#点击提交按钮login.click()email.send_keys('********')password.send_keys('*******')login.click()成功进入系统后,我们会去到想要的页面,收集HTML内容。#登录成功后,进入“OpenBets”页面browser.get('http://playsports365.com/wager/OpenBets.aspx')#获取需要的HTML内容Html=browser.page_source现在,当我们有HTML内容时,剩下的就是处理这些数据。我们将在BeautifulSoup和html5lib库的帮助下完成这项工作。html5lib是一个Python包,实现了受现代网络浏览器影响的HTML5抓取算法。一旦您的内容有了标准化的结构,您就可以在HTML标记的任何子元素中搜索数据。我们正在寻找的信息在表单标记中,因此我们正在寻找它。soup=BeautifulSoup(requiredHtml,'html5lib')table=soup.findChildren('table')my_table=table[0]我们会找到父标签一次,然后递归遍历子标签并打印出值。#接收标签并打印值rows=my_table.findChildren(['th','tr'])forrowinrows:cells=row.findChildren('td')forcellincells:value=cell.textprint(value)来执行这个程序,您需要使用pip安装Selenium、BeautifulSoup和html5lib。安装库后,像这样的命令:#python会将这些值打印到控制台,这就是你抓取任何网站的方式。如果我们正在抓取一个内容经常更新的网站(例如,体育比分表),我们应该创建一个cron作业以在特定时间间隔启动程序。太好了,一切正常,内容已获取,数据已填充,其他一切都很好,除了那是我们为获取数据而发出的请求数。有时服务器厌倦了同一个人发出一堆请求,服务器会禁止它。不幸的是,人的耐心是有限的。在这种情况下,你必须保护自己。最常见的封禁原因是403错误,封禁时频繁向服务器请求。当服务器可用并能够处理请求时,服务器抛出403错误,但由于某些个人原因拒绝这样做。第一个问题已经解决——我们可以通过使用html5lib生成一个假的用户代理来伪装成人类,将操作系统、规范和浏览器的随机组合传递给我们的请求。在大多数情况下,这可以很好地准确收集您感兴趣的信息。但有时将time.sleep()放在正确的位置并填写请求标头是不够的。所以你需要找到一个强大的方法来改变这个IP。要收集大量数据,您可以:–开发自己的IP地址基础设施;–使用Tor–这个主题可以专门写几篇大文章,而且实际上已经完成了;–使用商业代理网络;对于初学者来说,最好的办法是联系Infatica等代理提供商,他们可以帮助您设置代理并解决代理服务器管理中的所有困难。收集大量数据是资源密集型的,因此没有必要通过开发自己的内部基础设施来“重新发明轮子”来代理。甚至许多最大的电子商务公司也使用代理Web服务来外包代理管理,因为大多数公司的首要任务是数据,而不是代理管理。