爬虫入门-----静态网页


静态网页的爬取


提示:以下是本篇文章正文内容,下面案例可供参考

1.煎蛋网爬虫

  1. 以下代码则简单爬取了煎蛋网的文章标题
#煎蛋网爬虫
import requests

from lxml import etree

url = 'http://jandan.net/'

#因为禁止访问,所以构造user-Agent,以及Cookie,模仿正常电脑
headers = {
    'user-Agent' : 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36    (KHTML, like Gecko) Chrome/87.0.4280.141 Safari/537.36'
}

resp = requests.get(url , headers=headers)
print(resp.status_code)    #403 有资源,但无权限,禁止访问    500网关错误(人多)
if resp.status_code ==200:
    html = resp.text
    # print(html)

    dom=etree.HTML(html)
    # 小技巧:网页想要分析的地方,右键检查,开发者工具的elements会定位到那里。
    # 小技巧:开发者工具eLements, ctrl+f,打开搜索框, 里面尝试xpath表达式。
    xpath_pattern = '//div[@class="post f list-post"]/div[@class="indexs"]/h2/a/text()'
    titles = dom.xpath(xpath_pattern)

    for i in titles:
        print(i)
  1. 实验结果:
    在这里插入图片描述

2.网易新闻头部 爬虫

# 网易新闻头部 爬虫
import requests
from lxml import etree

url = 'https://news.163.com/'

resp = requests.get(url)
print(resp.status_code)
if resp.status_code == 200:
    html = resp.text
    # print(html)
    dom = etree.HTML(html)
    # 新闻网站文章从其它地方爬取、访问量大、自己网站也被其它网站爬取。
    # 测试发现,网易新闻非常宽容,不需要伪造请求头,大量请求也不会封ip。
    # 备注: 有段时间,网易新闻,开发者工具中xpath可以匹配到,但代码中匹配不到。因为使用了nodejs类前端框架,
    # 在第一次请求返回htmL后, js又动态进行了一些修改。所以network中请求的response和代码第一次请求后得到的html为准。

    xpath_pattern = '//div[@class="news_default_news"]/ul[@class="top_news_ul"]/li/a/text()'

    titles = dom.xpath(xpath_pattern)
    # print('titles',titles)
    for i in titles:
        print(i)

在这里插入图片描述

3.网易热点排行标题 爬虫

  • 本代码有小部分错误,无法获取<p>标签内的东西
  • 有缘人可以指正
#网易热点排行标题
import requests
from lxml import etree

url = 'https://news.163.com/'
resp = requests.get(url)

if resp.status_code == 200:
    html = resp.text
    dom = etree.HTML(html)
    #比对第一次请求后得到的原始html,class有三个值,开发者工具elements中有四个值,说明有js后续生成,应以原始信息为准
    # xpath_pattern = '//div[@class="mt35 mod_hot_rank clearfix"]/ul/li/a/text()'
    # titles = dom.xpath(xpath_pattern)

    # for i in titles:
    #     print(i)

    news_href_pattern = '//div[@class="mt35 mod_hot_rank clearfix"]/ul/li/a/@href'
    news_href_lists = dom.xpath(news_href_pattern)
    print(news_href_lists)
    #找文章详情页
    for news_href in news_href_lists:
        resp = requests.get(news_href)
        html = resp.text
        dom = etree.HTML(html)
        new_content = '//div[@class="post_body"]/p/text()'
        content = dom.xpath(new_content)
        print(content)

4.os库

os库:operate system.python 代码控制操作系统功能 ;就像windows 资源管理器,创建文件夹,文件,重命名,删除
import os

#打印当前工作目录下的文件和文件夹信息,返回列表
print(os.listdir())
#查看当前工作目录 current work diectory
print(os.getcwd())
#改变工作目录 change dictory
# print(os.chdir('../L02'))
# print(os.listdir())
#判断是否存在文件夹或文件
print(os.path.exists('./aaa'))
#创建文件夹  make dictory  第二次会报错
# os.mkdir('./aaa')

# if not print(os.path.exists('./aaa')):
#     os.mkdir('./bbb')

#获取当前脚本所在文件夹
print(os.path.dirname(__file__))        #__file__表示当前脚本本身
#拼文件的完整路径
# file_path ='E:/spiderProject/L03'+'/aaa'+'1.jpg'
file_path = os.path.join(os.path.dirname(__file__),'aaa','1.jpg')
print(file_path)
with open(file_path,'wb') as f:
    f.write()



5.debug模式

  • 调试运行模式
  • 在正式运行前,防止访问次数过多,造成网站封掉我们的IP,则可以利用断点调试代码

import requests

response = requests.get(url='https://www.baidu.com')
#状态码  
status_code = response.status_code
if status_code ==200:
    #网页数据 bytes
    content = response.content
    #网页数据 str。 一般直接去text属性,但是少数情况解码错误乱码
    text = response.text
    text = content.decode('utf-8')
    print(text)
    url = response.url
    headers = response.headers



6.天堂图片网 爬虫

这个网站没什么反爬措施
#天堂图片网爬虫 ,这个网站没什么反爬措施
import os
import requests
from lxml import etree

album_url = 'https://www.ivsky.com/tupian/lugui_v62472/'

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

resp = requests.get(album_url,headers=headers)
# status_code = resp.status_code
html = resp.text
dom = etree.HTML(html)

#获取一个图集下的所有缩略图片
image_pattern = '//ul[@class="pli"]//img/@src'
title_pattern = '//h1/text()'
images = dom.xpath(image_pattern)
titles = dom.xpath(title_pattern)[0]
titles = titles.strip()         #途径后可能有空格,但在 makdir() 会自动省略

#以title为文件名创建文件夹
if not os.path.exists('./'+titles):
    os.mkdir('./'+titles)

#循环图片地址列表
for i,img_src in enumerate (images):
    # print(img_src)
    img_src = 'https:' + img_src
    img_resp = requests.get(img_src,headers=headers)
    # print(resp.status_code)
    img_content_bytes = img_resp.content

    #图片二进制信息写入本地
    image_path = os.path.join(os.path.dirname(__file__),titles,f'{i+1}.jpg')

    with open(image_path,mode='wb') as f:
        f.write(img_content_bytes)
        print(f'第{i+1}张图片保存完毕,保存到了{image_path}')

实验结果:
在这里插入图片描述

7.站酷网爬虫

站酷网图集作品默认第一页,下翻后js动态加载后续,现在学的只能爬取下来第一页的图。所以可能出现开发者工具中xpath匹配30个图片,代码中只能下载10个的情况。 后续可以达到更深层次的爬取
#站酷网爬虫 
import os
import requests
from lxml import etree

album_url = 'https://www.zcool.com.cn/work/ZNTAyNTU4MjQ=.html'

headers = {
    'user-Agent' : 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36    (KHTML, like Gecko) Chrome/87.0.4280.141 Safari/537.36',

}

resp = requests.get(album_url,headers=headers)
# status_code = resp.status_code
html = resp.text
dom = etree.HTML(html)

#获取一个图集下的所有缩略图片
image_pattern = '//div[@class="work-show-box mt-40 js-work-content"]//div[@class="photo-information-content"]/img/@src'
title_pattern = '//h2/text()'
images = dom.xpath(image_pattern)
# print(images)
titles = dom.xpath(title_pattern)[0]
titles = titles.strip()         #途径后可能有空格,但在 makdir() 会自动省略

#以title为文件名创建文件夹
if not os.path.exists('./'+titles):
    os.mkdir('./'+titles)

#循环图片地址列表
for i,img_src in enumerate (images):
    # print(img_src)
    # img_src = 'https:' + img_src
    img_resp = requests.get(img_src,headers=headers)
    # print(resp.status_code)
    img_content_bytes = img_resp.content

    #图片二进制信息写入本地
    image_path = os.path.join(os.path.dirname(__file__),titles,f'{i+1}.jpg')

    with open(image_path,mode='wb') as f:
        f.write(img_content_bytes)
        print(f'第{i+1}张图片保存完毕,保存到了{image_path}')

实验结果:
在这里插入图片描述

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值