文章采集链接(Java开发中常见的一些链接数据汇总(一))

优采云 发布时间: 2022-02-25 19:19

  文章采集链接(Java开发中常见的一些链接数据汇总(一))

  关键词:

  当我看到办公桌上有一条银鱼时,我比普通的夫妻要好。本文章主要讲Python数据采集-启动爬虫相关知识,希望对大家有所帮助。

  单个域名的遍历

  网络爬虫就是抓取目标网页,然后遍历到数据信息,然后用链接继续遍历,以此类推。

  第一步:获取页面上的所有链接

   1 from urllib.request import urlopen

2 from bs4 import BeautifulSoup

3 import re

4

5 html = urlopen("https://www.yahoo.com/")

6 html_str = html.read().decode(‘utf-8‘)

7 #print(html_str)

8 bsObj = BeautifulSoup(html_str)

9 ##获取页面链接地址

10 for link in bsObj.findAll("a"):

11 if ‘href‘ in link.attrs:

12 print(link.attrs[‘href‘])

  运行效果图

  

  发现会有一些无用的数据。一些href值只作为页块跳转。我们可以使用正则表达式来优化过滤掉,只获取HTML结尾的链接

   1 from urllib.request import urlopen

2 from bs4 import BeautifulSoup

3 import re

4

5 html = urlopen("https://www.yahoo.com/")

6 html_str = html.read().decode(‘utf-8‘)

7 #print(html_str)

8 bsObj = BeautifulSoup(html_str)

9 ##获取页面链接地址

10 for link in bsObj.findAll("a" ,href= re.compile(".*.html")):

11 if ‘href‘ in link.attrs:

12 print(link.attrs[‘href‘])

  第 2 步:递归获取网页

  第一步基本上是获取一个网页的所有链接地址,第二步显然是获取这些链接网页的链接,进而获取这些网页的数据。

  比如我们获取Wiki中python条目下相关条目的链接。既然有我们不关心的链接,所有的链接都需要用正则表达式过滤掉,然后就有大量的链接链接。我们不能把它们全部用完。一些条款。

   1 from urllib.request import urlopen

2 from bs4 import BeautifulSoup

3 import re

4 import datetime

5 import random

6

7 rd = random.seed(datetime.datetime.now())

8 print(rd)

9

10 def getLinks(articleUrl):

11 html = urlopen("https://en.wikipedia.org"+articleUrl)

12 bsObj = BeautifulSoup(html,"lxml")

13 return bsObj.findAll("a",href=re.compile("^(/wiki/)((?!:).)*$"))

14

15 links = getLinks("/wiki/Python")

16

17 while len(links) >0 :

18 #print(links)

19 newArticle = links[random.randint(0, len(links)-1)].attrs["href"]#随机获取一个来继续爬

20 print(newArticle)

21 links = getLinks(newArticle)

  运行结果(一分钟产生150条数据,如果不手动停止,应该不会停止爬取)

  

  两个采集整个网站

  做所有链接采集到整个站点,当然有很多数据网站像wikis,几乎不可能采集全部。

   1 from urllib.request import urlopen

2 from bs4 import BeautifulSoup

3 import re

4 pages = set()

5 def getLinks(pageUrl):

6 global pages

7 html = urlopen("http://en.wikipedia.org"+pageUrl)

8 bsObj = BeautifulSoup(html,"lxml")

9 try:

10 print(bsObj.h1.get_text())

11 print(bsObj.find(id="mw-content-text").findAll("p")[0])

12 print(bsObj.find(id="ca-edit").find("span").find("a").attrs[‘href‘])

13 except AttributeError:

14 print("页面缺少一些属性!不过不用担心!")

15 for link in bsObj.findAll("a", href=re.compile("^(/wiki/)")):

16 if ‘href‘ in link.attrs:

17 if link.attrs[‘href‘] not in pages:

18 # 我们遇到了新页面

19 newPage = link.attrs[‘href‘]

20 print("----------------

"+newPage)

21 pages.add(newPage)

22 getLinks(newPage)

23 getLinks("")

  运行结果

  

  递归爬取网页的原理:

  

  三个使用 Scrapy采集

  高楼大厦是由最简单的一砖一瓦堆砌而成,而编写一个网络爬虫也是由许多简单重复的操作组成,寻找页面的关键信息和外部链接,然后重复这个循环。Scrapy库可以大大减少对网页链接的搜索(不用自己做很多过滤条件和正则表达式),降低识别工作的复杂度。

  使用参考;

  第一步是创建一个Scrapy项目

  

  报错,安装scrapy,cmd-pip install scrapy

  

  错误,未安装视觉 14

  重装成功,再次执行

  scrapy startproject tutorial

  创建成功后目录结构如下

  

  第二步,定义数据源,修改item(参考官网)

  

  第三步,创建爬虫类(参考官网)

  

  第四步,进入spider目录,然后运行爬虫

  错误,缺少 win32 库

  

  点安装 pywin32

  

  再次成功运行

  

  第一个Scrapy helloworld基本完成,流程大致如下:

  Scrapy 在 Spider 的 start_urls 属性中为每个 URL 创建一个对象,并将 parse 方法分配给 Request 作为回调。

  Request对象被调度,生成的对象被执行并发回spider方法。

  如果有用,以后继续深入学习Scrapy。

  至此,这篇关于Python数据采集-启动爬虫的文章就讲完了。如果没有解决你的问题,请参考下面的文章:

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线