如何使这个爬虫更有效[关闭](代码片段)

author author     2022-12-29     150

关键词:

我构建了这个网络爬虫。

https://github.com/shoutweb/WebsiteCrawlerEmailExtractor

//Regular expression function that scans individual pages for emails
    function get_emails_from_webpage($url)
    
      $text=file_get_contents($url);
      $res = preg_match_all("/[a-z0-9]+[_a-z0-9\.-]*[a-z0-9]+@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]2,4)/i",$text,$matches);
      if ($res) 
          return array_unique($matches[0]);
      
      else
          return null;
      
    

//URL Array
$URLArray = array();

//Inputted URL right now it just pulls it from a GET variable but you can do alter this any way you want
$inputtedURL = $_GET['url'];


//Crawling the inputted domain to get the URLS
$urlContent = file_get_contents("http://".urldecode($inputtedURL));
$dom = new DOMDocument();
@$dom->loadHTML($urlContent);
$xpath = new DOMXPath($dom);
$hrefs = $xpath->evaluate("/html/body//a");

$scrapedEmails = array();

for($i = 0; $i < $hrefs->length; $i++)
    $href = $hrefs->item($i);
    $url = $href->getAttribute('href');
    $url = filter_var($url, FILTER_SANITIZE_URL);
    //array_push($scrapedEmails, $hrefs->length);
    // validate url
    if(!filter_var($url, FILTER_VALIDATE_URL) === false)
        if (strpos($url, $inputtedURL) !== false) 
                array_push($URLArray, $url);
            

    


//Extracting the emails from URLS that were crawled
foreach ($URLArray as $key => $url) 
    $emails = get_emails_from_webpage($url);

    if($emails != null)
      foreach($emails as $email) 
          if(!in_array($email, $scrapedEmails))
            array_push($scrapedEmails,$email);
        
      
     



//Ouputting the scraped emails in addition to the the number of URLS crawled
foreach($scrapedEmails as $value) 
    echo $value . " " . count($URLArray);

它基本上会进入您输入的域,获取所有页面,然后检查是否有电子邮件。

每个域最多可能需要30秒才能抓取。我想看看是否有办法加速这个webcrawler。我想的一种方法是将其限制为仅联系页面,但我无法找到一种聪明的方法。

答案

如果你的意图不是邪恶的 -

正如评论中所提到的,实现此目的的一种方法是并行执行爬虫(多线程)---而不是一次执行一个域。

就像是:

exec('php crawler.php > /dev/null 2>&1 &');
exec('php crawler.php > /dev/null 2>&1 &');
exec('php crawler.php > /dev/null 2>&1 &');
exec('php crawler.php > /dev/null 2>&1 &');
exec('php crawler.php > /dev/null 2>&1 &');

在服务器上,您可以设置自动执行此操作的CRON作业,以便您不会手动运行它。

如何使这个联合查询更有效率?

】如何使这个联合查询更有效率?【英文标题】:howtomakethisunionquerymoreeffecient?【发布时间】:2021-02-2515:27:45【问题描述】:我使用UNION连接创建了下面的SQL查询。如您所见,我查询同一张表2次,条件略有不同。如果TYP是A,那么... 查看详情

我怎样才能使这个二进制搜索代码更有效?

】我怎样才能使这个二进制搜索代码更有效?【英文标题】:HowcanImakethisbinarysearchcodemoreefficient?【发布时间】:2022-01-1107:00:40【问题描述】:publicclassMySearchpublicstaticintsearch(MyArrayarray,intvalue)intindex=-1;intstart=0,end=array.length-1;while(sta... 查看详情

java示例代码_奇怪的错误+如何使代码更有效

java示例代码_奇怪的错误+如何使代码更有效 查看详情

如何使这段代码更短[关闭]

】如何使这段代码更短[关闭]【英文标题】:HowdoImakethiscodeshorter[closed]【发布时间】:2017-08-0422:52:20【问题描述】:如何使这段代码更短我已经尝试了所有方法!if(((condition.toString()).length())==("false".length())-1&&((condition.toString... 查看详情

python——网络爬虫,一个简单的通用代码框架(代码片段)

一、代码"""通用代码框架:可使网页爬取变得更稳定更有效下面是一个爬取百度网页的例子,正常情况下是返回"""importrequestsdefget_HTML_Text():try:r=requests.get(url,timeout=30)r.raise_for_status()#若状态不是200,引发HTTPError异常r.encoding=r.apparen... 查看详情

有没有办法让这个代码更有效,更小?(代码片段)

我刚刚编写了这个代码,用于将十进制转换为二进制,使用除以2的方法。它工作得很好,但我只是想知道是否有办法让它更有效,更容易阅读。defbinary(d):stop=Falsec=[]whilestop==False:b=d%2ifb==0:d=d/2else:d=d/2b=1c.append(b)ifd==1:c.append(1)stop=Tr... 查看详情

如何使这个 python 代码成为一个衬里? [关闭]

】如何使这个python代码成为一个衬里?[关闭]【英文标题】:HowdoImakethispythoncodeaoneliner?[closed]【发布时间】:2021-11-1403:16:39【问题描述】:for_inline:ifline=="t":t+=1else:s+=1如何使这个python代码成为一个单行代码?【问题讨论】:t和s... 查看详情

雄联盟工程师独家分享:如何使开发更有效率

Hey,大家好!我是Bill“LtRandolph”Clark,一名英雄联盟的游戏工程师。许多Rioter工程师关注大量的内容需要直接发送给玩家问题——这是两个我最近最喜欢的例子之一,包括最新的冠军Jhin及项目重构的支持。而我的团... 查看详情

如何使这个 R data.table 代码更节省内存?

】如何使这个Rdata.table代码更节省内存?【英文标题】:HowtomakethisRdata.tablecodemorememory-efficient?【发布时间】:2015-03-1223:21:37【问题描述】:我有两个真实的data.table代码示例,它们可以正常工作,但似乎消耗的内存比我预期的要... 查看详情

我怎样才能使这个 WHERE NOT EXISTS 查询更有效

】我怎样才能使这个WHERENOTEXISTS查询更有效【英文标题】:HowcanImakethisWHERENOTEXISTSquerymoreefficient【发布时间】:2021-05-2618:27:29【问题描述】:首先是表格调查CREATETABLE`surveys`(`survey_id`int(11)NOTNULLAUTO_INCREMENT,`survey_name`varchar(100)COLLATEut... 查看详情

如何使批处理文件仅在应用程序关闭后运行

】如何使批处理文件仅在应用程序关闭后运行【英文标题】:Howtomakebatchfilerunonlyafterapplicationhasclosed【发布时间】:2021-08-1608:43:11【问题描述】:这个用例是不必要的定义,但我对脚本产生了兴趣,我正在努力学习。我发现当尝... 查看详情

python(如何使文本在pythonshell中显得更慢)(代码片段)

我正在尝试编写游戏代码,但我仍然坚持尝试在pythonshell中使打印速度变得更慢我感谢所有帮助这里是目前为止的代码print("welcometothemusicguessinggame")print("begin?")print("firstofallletsgothroughtherules")print("Youhavethree3livestoanswereachsonginthisg 查看详情

如何使这个 jquery 函数更简洁?

】如何使这个jquery函数更简洁?【英文标题】:HowcanImakethisjqueryfunctionmoreterse?【发布时间】:2011-06-2116:46:17【问题描述】:我在我的asp.net项目中的一个通用javascript文件中有此代码。每当我将鼠标悬停在受此函数影响的按钮之一... 查看详情

如何使 Tomcat 8 websocket 示例有效? [关闭]

】如何使Tomcat8websocket示例有效?[关闭]【英文标题】:HowtomakeTomcat8websocketexampleworks?[closed]【发布时间】:2014-03-1908:43:58【问题描述】:我刚刚下载了Tomcat8,我想通过在ECHO示例应用程序上进行测试来测试WebSocket功能(位于../webapp... 查看详情

如何编写更好,更清晰的银行帐户代码版本?[关闭](代码片段)

...已经创建的帐户。这是非常程序化的,但我需要帮助知道如何做才能让它变得更好。就像我想要一个选项,在存款完成后退回并退出,并使用单独的键退出控制台应用程序。intmain()//MIKEBANKLTDstringname;stringdefacctNum="123456";stringacctNum... 查看详情

我可以使这个phonevalidatorregex更有效吗?(代码片段)

...创建高效的正则表达式真的是一种艺术吗?)所以我写了这个简单的正则表达式以匹配以色列电话号码:^05[23489]-?[d]3-?[d]4$但是它能完成在1或2秒内完成大约10,000个电话号码验证的工作吗?我这里没有电脑所以我无法查看。谢谢... 查看详情

如何使页面交互更流畅(代码片段)

流畅性本篇是基于FDCon2019上《让你的网页更丝滑by刘博文》的复盘文。该课题也是博主感兴趣的领域,后续会结合React的Schedule与该文进行进一步整合,个人博客被动交互:animation主动交互:鼠标、键盘被动交互当前市面上的设备频率... 查看详情

爬虫日记(98):twisted的使用回调更简单(代码片段)

在前面已经学习了使用一个下载诗歌的客户端,而这个客户端使用了传送层、协议、协议工厂类的抽象,这样更加方便框架的抽象能力,适用更多类型的应用。由于前面的例子实现还是有点复杂,可以对它进一步修改,可以改为... 查看详情