网络爬虫-学习记录(二)动态网站爬取

目录

目录

一、任务描述

二、任务网站描述

三、运行结果及说明

1.简单网络选择了《占星后天十二宫简介科普网站》

a)观察网络特征

b)分析内链规律

c)在内链中找到所需要爬取的

d)进行爬取

e)结果如下

2.复杂网络内外链爬取实践

a)观察网络特征

b)定位内链

c)内链元素定位

d)代码运行如下

e)结果如下

四、源码

1.

2.


一、任务描述

选取一个网站,例如新闻类、影评类、小说、股票金融类、就业类等等。

(1) 初步分析,数据抓取方式:静态或动态页面,get/post方式;

(2) 确定信息抽取方式:BeautifulSoup、re、xpath或json格式提取;

(3) 初步分页 网页结构,获取几层页面;每层页面提取的URL特征等等。

要求:

1.完成内链接提取和数据提取

2.设置合适的异常处理,保证程序正确运行

3.将提取的数据存储到文件:txt或csv或json等

二、任务网站描述

网站url:

  • 简单网络选择《占星后天十二宫简介科普网站》

占星后天十二宫位简介 - 占星之门

  • 复杂网络内外链爬取实践选择《58同城招聘网》

选择了58同城招聘网站,作为大三学生,贴近市场需求是很有必要的,因此通过网络大数据采集,了解真正市场对应届生的人才需求。

请输入验证码 ws:123.56.4.112

三、运行结果及说明

1.简单网络选择了《占星后天十二宫简介科普网站》

占星后天十二宫位简介 - 占星之门

a)观察网络特征

可以看见该网页是简单的内链罗列

b)分析内链规律

爬取内链链接形成链接列表

c)在内链中找到所需要爬取的

d)进行爬取

代码实现如下:

需要加载的包

获取内链链接

获取内链内容列表

列表内容查看

将列表内容写入txt

e)结果如下

 

2.复杂网络内外链爬取实践

选择了58同城招聘网站,作为大三学生,贴近市场需求是很有必要的,因此通过网络大数据采集,了解真正市场对应届生的人才需求。

请输入验证码 ws:123.56.4.112

a)观察网络特征

b)定位内链

c)内链元素定位

d)代码运行如下

加载此次运行需要的包

开始获得内链列表,先获取外链

抓取成功

获得内链列表

紧接着获取内链元素

e)结果如下

最后将结果写入文档

结果如下

四、源码

1.

from urllib.request import urlopen

from bs4 import BeautifulSoup

from urllib.error import HTTPError

from urllib.error import URLError

import re

import json

import requests

#形成一个列表

list = []

#获得html

html = urlopen("https://cn.astrodoor.cc/keyword/house.jsp")

#伪装成浏览器

headers ={

    "User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.54 Safari/537.36"

}

#解析爬取的网页

bs = BeautifulSoup(html.read(),"html.parser")

#获取内链列表(用正则表达式捕获要的内链链接)

a = bs.find_all('a',href=re.compile('^(/keyword/house/)'))

try:

    for link in a:

        if'href'in link.attrs:

            newpage = link.attrs['href']

            print(newpage)

            url = urlopen(f'https://cn.astrodoor.cc/{newpage}')

            headers ={ "User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.54 Safari/537.36"                        }

            wd = BeautifulSoup(url.read(),"html.parser")

#wd = requests.get(url,headers=headers)

            i = wd.find_all('p',itemprop=re.compile('^(description)'))

            #将内链链接追加到列表中

            list.append(i)

except HTTPError as e:

    print(e)

except URLError as e:

    print('The server could not be found')

else:

    print('It Worked!')

#将爬取到的内容写入文档中

file = open('D:\\网络大数据采集\\test.txt', 'w')

for i in range(len(list)):

    s = (re.sub(r"['{ },]*", '', str(list[i])) + '\n').replace(':', ',')

    file.write(s)

file.close()

2.

from urllib.request import urlopen

from bs4 import BeautifulSoup

from urllib.error import HTTPError

from urllib.error import URLError

import re

import json

import requests

url = 'https://sjz.58.com/job/?param7503=1&from=yjz2_zhaopin&utm_source=market&spm=u-2d2yxv86y3v43nkddh1.BDPCPZ_BT&PGTID=0d202408-000f-1e04-4d58-adf3798333c1&ClickID=2'

#请求方式POST

#伪装成浏览器

headers ={

    "User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.54 Safari/537.36"

}

#解析爬取的网页

response = requests.get(url,headers=headers)

html = BeautifulSoup(response.content,'html.parser')

a = html.find_all('a',href=re.compile('^(https://legoclick.58.com/)'))

list = []

try:

    for link in a:

        if'href'in link.attrs:

            newpage = link.attrs['href']

            print(newpage)

            headers ={ "User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.54 Safari/537.36"                        }

            response = requests.get(newpage,headers=headers)

            wd = BeautifulSoup(response.content,'html.parser')

            #i = wd.find_all(name='div',attrs={"class":"des"}

            obj = re.compile(r'<div.*?class="des">(.*?)</div>',re.S)

            wd = str(wd)

            i = obj.findall(wd)

            list.append(i)

except HTTPError as e:

    print(e)

except URLError as e:

    print('The server could not be found')

else:

    print('It Worked!')

#将爬取到的内容写入文档中

file = open('D:\\网络大数据采集\\test2.txt', 'w')

for i in range(len(list)):

    s = (re.sub(r"['{ },]*", '', str(list[i])) + '\n').replace(':', ',')

    file.write(s)

file.close()

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值