当前位置: 首页 > 网络应用技术

Python Reptile有多少个链接(2023年的最新汇编)

时间:2023-03-09 02:17:49 网络应用技术

  简介:许多朋友问有关Python爬行动物有多少个链接的问题。本文的首席CTO笔记将为您提供详细的答案,以供所有人参考。我希望这对每个人都会有所帮助!让我们一起看看!

  在上一篇文章中,Python意识到了“ Wikipedia六度”的基本轨道,我们在一个网站上从一个链接中随机实现了一个链接。但是,如果我们需要根据目录进行系统地对整个网站进行分类,我们需要搜索网站上的每个页面,我们应该做什么?我们需要收集整个网站,但这是一个消耗大量内存资源的过程。尤其是在处理大型网站时,更合适的工具是使用数据库来存储收集资源的集合。让关于如何做的话题。

  网站地图站点地图

  网站地图,也称为网站地图,是一个页面,该页面位于网站上的网站链接上,需要由搜索引擎捕获(注意:并非所有页面,通常所有文章链接。在网站上,您不需要所需的信息时,您可以将网站地图用作补救措施。搜索引擎蜘蛛非常喜欢该网站地图。

  对于SEO,网站地图的好处:

  1.提供指向搜索引擎蜘蛛的链接以浏览整个网站的链接,以简单地反映网站的整体框架以查看搜索引擎;

  2.为搜索引擎蜘蛛提供一些链接,指向动态页面或使用难以获得的其他方法;

  3.作为潜在的着陆页,您可以优化搜索流量;

  4.如果访问者试图访问网站所在的域中不存在的URL,则该访问者将被转移到错误的页面“无法找到文件”,并且网站映射可以用作“quasi”页面的内容。

  数据采集

  收集网站数据并不难,但是有足够的爬行者。我们创建一个爬行者,递归地遍历每个网站并在这些网站上收集数据。通常,时间 - 耗时的网站收集方法从顶页开始(通常是网站主页),然后搜索页面上的所有链接以形成列表。清单,重复执行。

  显然,这是一个迅速发展的过程。每个页面有10个链接,网站上有5页的深度。如果收集了整个网站,则收集的网页数量为105,即100,000页。

  由于重复网站上的许多内链,以避免重复收集,因此该链接必须很重。在Python中,最常用的方法是使用其自己的集合方法。仅收集“新”链接。请查看代码实例:

  /www.shouxicto.com/article/re.compile.compile.compile.compile.compile.compile.comp.utls in link.attrs:iflink.attrs ['href']不在页面中:#this是一个新的页面。这是一个新的页面.newpage = link.attrs ['href'] print(newPage)pages.add(newPage)getLinks(newpage)getLinks(“”)

  原理描述:执行程序后,使用函数处理一个空的URL,该URL实际上是Wikipedia的主页,然后在主页上遍历每个链接,并检查它是否已经在全局变量中的页面中。递归处理此链接。

  递归警告:Python的默认递归限制是1000次,因为Wikipedia的链接就像烟雾之海,因此该程序在达到递归限制后会停止。如果您不想停止,则可以设置递归或其他方法。

  收集整个网站数据

  为了有效地使用爬行动物,我们需要在使用爬网时在页面上做些事情。let的创建爬网器来收集页面标题,文本的第一段以及编辑页面的链接(如果。)此信息。

  在第一步中,我们需要先观察网站上的页面,然后制定收集模式,然后通过F12(通常)查看元素以查看页面组成。

  观察Wikipedia页面,包括条目和非单词页面,例如隐私策略等页面,您可以获得以下规则:

  所有标题均在H1→SPAN标签中,页面上只有一个H1标签。

  所有文本都在Div#BodyContent标签中。如果我们想获得第一段,我们可以使用div#mw-conflic-Text→p。除文件页外,此规则适用于所有页面。

  编辑链接仅出现在输入页面上。如果有一个编辑器链接,则位于Li#Ca-edit→Span→A中,位于Li#Ca-edit标签中。

  调整先前的代码,我们可以为爬网和数据收集创建一个组合程序。代码如下:

  ).findall(“ p”)[0])print(soup.find(id =“ ca-edit”)。查找(“ span”)。查找(“ a”)。::print(“页面缺乏属性”)对于soup.findall中的链接(“ a”,href = re.com(“^(/wiki/)”):如果link.attrs中的'href':#this this是new newpage newpage = link.attrs ['href'''href'] 打印 (” - - - - - - - - - -

  “+新闻)

  此循环基本上与原始集合程序基本相同,因为无法确定每个页面上都有所有类型的数据,因此每个打印语句都根据数据从高到低的页面上排列。在页面上

  数据存储到MySQL

  数据之前已经获得,并直接打印。查看更麻烦,因此我们将其直接存储在MySQL中。这里只有一个有意义的链接,因此我们存储了页面的标题和内容。我之前有两篇文章,我介绍了如何将数据存储到MySQL。数据表是页面。这里

  cursor()cur.execute(“使用wiki”)#random.seed(dateTime.dateTime.now())#data Storage def Store(title,content):cur.execute(“插入页面(标题,标题,content,content,content,content))值(“%s”,“%s”),(title,content))cur.connection.commit()def getLinks(aCRECTURL):html = urlopen(“” + arternurl)title = sip.find(“ h1)”)。get_text()content = sound(“ div”(“ div”,{“ id”:“ mw-content-text”})。查找(“ p”)。get_text()store()store(title,consess)return。)))))))#设置首页链接= getLinks(“/wiki/kevin_bacon”))try:wher len(links)0:newArticle = links [randy.randint(0,lin(lin(links)-1)-1)]。attrs ['href'] print(newArticle)链接= getLinks(newslly)final:cur.close()const()const()const()const()

  概括

  今天,让我们谈谈链接以在Python收集网站,以促进下面的学习。

  我希望通过上述操作为所有人提供帮助。如果您有任何好的意见,建议或不同的意见,希望您能留下一条信息与我们交流和讨论。

  1.爬上我们需要的前线链接

  channel_extract.py

  前线链接这里是我们所说的大类别链接:

  从BS4导入美丽的群岛请求

  start_url =''host_url =''def get_channels(url):

  wb_data = requests.get(url)

  汤= beautifutsoup(wb_data.text,'lxml')

  links = soup.select('。feenlei dt a')#print(链接)

  对于链接中的链接:

  pay_url = host_url + link.get('href')

  print(page_url)#get_channel_urls(start_url)channel_urls =''''

  ''''12345678911111313141516171819202222227272727272727272727272727272729333333333666666

  然后以我爬行的58个城市为例,以抓住第二类市场的所有类别的链接,这是我说的大型类别链接。

  找到这些链接的共同特征,使用功能输出它,然后将其存储为多行文本。

  2.获取我们需要的页面所需的详细信息的链接和详细信息

  page_parsing.py

  1.谈论我们的数据库:

  首先查看代码:

  #件来自bs4 intimport offiment requestsimport pymongo #python操作mongodb的库导入重新竞争时间#并建立数据库客户端= pymongoclient('localhost',277,27

  ceshi = client ['ceshi'] #c ceshi数据库ganji_url_list = ceshi ['ganji_url_list'] #create a表文件ganji_url_info = ceshi_url_url_info']

  2.确定页面结构是否与我们想要的页面结构匹配,例如有时404页;

  3.从页面上提取我们想要的链接,即每个详细信息页面的链接;

  我们想在这里说的是:

  item_link = link.get('href')。拆分('?')[0] 12

  这里是什么类型的链接,这是什么获取方法?

  后来我发现这种类型是

  'bs4.element.tab1类

  如果我们想单独获得某个属性,则可以使用它,例如,我们获得了什么类名称

  打印汤。P['class']

  #['title'] 12

  也可以使用GET方法传递属性的名称,两者是等效的

  打印汤。get('class')#['title'] 12

  让我发布代码:

  #所有产品页面链接的疯狂详细信息:def get_type_links(频道,num):

  list_view ='{0} o {1}/'。格式(频道,str(num))#print(list_view)

  wb_data = requests.get(list_view)

  汤= beautifutsoup(wb_data.text,'lxml')

  linkon = soup.select('。pagebox')#determine是否是我们所需页面的标志;

  #如果选择攀爬的选择链接为:div.pagebox ul li:nth-child(1)跨度:nth-child(1)删除它

  #print(linkon)

  如果Linkon:

  link = soup.select('。zz.zz-til a')

  link_2 = soup.select('。js-item a')

  链接=链接 +链接_2 #print(len(link))

  对于链接中的链接:

  linkc = linkc.get('href')

  ganji_url_list.insrt_one({'url':linkc})

  print(linkc)else:Pass12345678911111313151617181920

  4.我们在详细信息页面中需要的信息

  让我发布一件代码:

  #Crazy Jiji详细信息页面链接:def get_url_info_ganji(url):

  时间。

  wb_data = requests.get(url)

  汤= beautifutsoup(wb_data.text,'lxml')尝试:

  title = soup.select('头标题')[0] .TEXT

  timec = sound.select('。pr-5')[0] .text.strip()

  type = soup.selet('。dest-infor li span a'')[0] .TEXT

  价格=汤。选择('。det-infor li i')[0] .Text

  place = soup.select('。det-infor li a')[1:]

  placec = []适当的位置:

  placeb.append(placec.text)

  tag = soup.select('。二-dt-bewrite ul li')[0] .TEXT

  tag =''.join(tag.split())#print(time.split())

  data = {'url':url,'title':title,'time':timec.split(),'type':type':type,'price':price':price,'plote':placeb,'place':placeb,'new':tag':标签':tag':tag':tag':tag':标签

  }

  ganji_url_info.insert_one(数据)#insert数据库中的一块数据;

  印刷(数据)除indexError:pass1234567891111113131417181920222222222227282930

  4.如何编写我们的主要功能?

  main.py

  查看代码:

  

  对于我的范围(1,100):

  get_type_links(channel,i)#执行此功能后爬网所有详细信息页面的所有详细信息:如果__name __ =='__ main __':#pool = pool = pool = pool()## pool()#pool.map(get_url_info_info_ganji)[[[[get_url_info_ganji,[[[[[[url [url'url'] for url in ganji_url_list.find()]#pool.close()#pool.join()#pirst clirst执行以下函数来抓取所有链接。':

  pool = pool()

  pool = pool()

  pool.map(get_all_links_from,channel_urls.split())

  pool.close()

  pool.join()12345678911111131314151618192022222242666

  五,计数程序

  count.py

  用于显示爬行数据的数量;

  导入到page_parsing导入import ganji_url_list,ganji_url_infowhile true:#print(ganji_url_list.find()。count()))

  #time.sleep(5)

  打印(ganji_url_info.find()。count())

  时间。

  如果要临时存储,请使用列表(程序用完了)。

  如果您想导出到Excel,则可以使用OpenPyXl

  结论:以上是首席CTO注释为每个人编写的Python Crawler的相关内容的相关内容。希望它对您有所帮助!如果您解决了问题,请与更多关心此问题的朋友分享?