首页 > 其他分享 >爬虫爬取网页的信息与图片的方法

爬虫爬取网页的信息与图片的方法

时间:2024-07-21 14:55:03浏览次数:16  
标签:xpath 网页 url tree 爬虫 li 爬取 print div

爬虫爬取网页的信息与图片的方法

  • 爬取人物信息

import requests

head = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36 Edg/126.0.0.0"
}
# 这是get请求带参数的模式
def get_param():
    # 1、url
    url = "https://www.sogou.com/web?"
    # 2、发送请求 get带参数使用params参数
    response = requests.get(url, headers=head, params={"query": "刘亦菲"})
    # 3、获取想要的数据
    with open("./dilireba.html", "w", encoding="utf8") as fp:
        fp.write(response.text)
        print(type(response.text))
    pass
get_param()

在这里插入图片描述

  • 爬取动态变换的数据(如:翻译)

import requests
def post_data():
    # 1、url
    url = 'https://fanyi.baidu.com/sug'

    # 2、发送请求
    response = requests.post(url, headers=head, data={"kw": "dog"})

    # 获取想要的数据
    print(response.json())
post_data()

在这里插入图片描述

  • 爬取具体位置的数据的方法

import requests
from lxml import etree
if __name__ == '__main__':
    tree = etree.parse("./test.html")#读取文件
    # xpath返回的都是列表
    # / 标识一个层级
    print(tree.xpath("/html/body/div/p"))#找到想要数据的位置
    print(tree.xpath("/html/head/title"))
    # 定位百里守约  索引定位 从1开始
    print(tree.xpath("/html/body/div[1]/p"))#读取第一个div的p
    print(tree.xpath("/html/body/div/p[1]"))#读取body下面所有div下的第一个p
    #
    print(tree.xpath("/html/body/div[2]/a[2]"))
    print(tree.xpath("/html/body/div[3]/ul/li[3]/a"))
    #
    # # // 标识多个层级 属性定位 attr = class id
    # 定位李清照
    print(tree.xpath("//div[@class='song']/p[1]"))
    #查看class或id 对应的信息是不是独一无二的,如是采用div[@class='song']这种形式,如不是查看其上一级是不是独一无二的。
    print(tree.xpath("//div[@class='song']/a[@class='du']"))

    # # 取所有的li标签
    print(tree.xpath("//div[@class='tang']/ul/li"))
    # # 取li标签内的所有a标签
    for li in tree.xpath("//div[@class='tang']/ul/li"):
        try:#数据正确
            print("".join(li.xpath("./a/text()")))#将列表形式变成字符串形式
        except Exception as e:#数据失败,执行下一个,不会影响其他数据执行
            pass
    #
    # # 取标签下的直系文本内容
    print(tree.xpath("/html/body/div[1]/p/text()"))
    # 取标签下的所有文本
    print(tree.xpath("/html/body/div[2]//text()"))
    # 取标签内的属性值 @attr_name
    print(tree.xpath("//div[@class='song']/img/@src"))

在这里插入图片描述
在这里插入图片描述

test.html文件
<html lang="en">
	<head>
		<meta charset="UTF-8" />
		<title>测试bs4</title>
	</head>
	<body>
		<div>
			<p>百里守约</p>
		</div>
		<div class="song">
			你好
			<p>李清照</p>
			<p>王安石</p>
			<p>苏轼</p>
			<p>柳宗元</p>
			<a href="http://www.song.com/" title="赵匡胤" target="_self">
				<span>this is span</span>
			宋朝是最强大的王朝,不是军队的强大,而是经济很强大,国民都很有钱</a>
			<a href="" class="du">总为浮云能蔽日,长安不见使人愁</a>
			<img src="http://www.baidu.com/meinv.jpg" alt="" />
		</div>
		<div class="tang">
			<ul>
				清明时节雨纷纷,路上行人欲断魂
				<li>
					<a href="http://www.baidu.com" title="qing">
						清明时节雨纷纷,路上行人欲断魂,借问酒家何处有,牧童遥指杏花村
					</a>
				</li>
				<li>
					<a href="http://www.163.com" title="qin">
						秦时明月汉时关,万里长征人未还,但使龙城飞将在,不教胡马度阴山
					</a>
				</li>
				<li><a href="http://www.126.com" alt="qi">岐王宅里寻常见,崔九堂前几度闻,正是江南好风景,落花时节又逢君</a></li>
				<li><a href="http://www.sina.com" class="du">杜甫</a></li>
				<li><a href="http://www.dudu.com" class="du">杜牧</a></li>
				<li><b>杜小月</b></li>
				<li><i>度蜜月</i></li>
				<li><a href="http://www.haha.com" id="feng">凤凰台上凤凰游,凤去台空江自流,吴宫花草埋幽径,晋代衣冠成古丘</a></li>
			</ul>
		</div>
	</body>
</html>
  • 爬取网页(豆瓣TOP250的数据)

# pip install fake_useragent
import time

import requests
import fake_useragent
from lxml import etree
import re

if __name__ == '__main__':
    # UA伪装
    head = {
        # "User-Agent" : "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36 Edg/126.0.0.0"
        "User-Agent": fake_useragent.UserAgent().random
    }

    # 打开一个文件写入数据
    fp = open("./doubanFilm.txt", "w", encoding="utf8")

    # 1、url
    # url = "https://movie.douban.com/top250"
    # url2 = "https://movie.douban.com/top250?start=25&filter="
    # url3 = "https://movie.douban.com/top250?start=50&filter="
    for i in range(0, 250, 25):#所有网页地址
        url = f"https://movie.douban.com/top250?start={i}&filter="
        time.sleep(5)
        # 2、发送请求
        response = requests.get(url, headers=head)
        # 3、获取想要的数据
        res_text = response.text
        # 4、数据解析
        tree = etree.HTML(res_text)
        # 定位所有的li标签
        li_list = tree.xpath("//ol[@class='grid_view']/li")  # 所有的li标签,包含信息
        for li in li_list:
            film_name = "".join(li.xpath(".//span[@class='title'][1]/text()"))  # 改成字符串形式
            director_actor_y_country_type = "".join(li.xpath(".//div[@class='bd']/p[1]/text()"))
            score = "".join(li.xpath(".//span[@class='rating_num']/text()"))
            quote = "".join(li.xpath(".//span[@class='inq']/text()"))
            # director_actor_y_country_type需要修改
            new_str = director_actor_y_country_type.strip()  # 去除空格
            y = re.match(r"([\s\S]+?)(\d+)(.*?)", new_str).group(2)  # 正则表达式方式
            country = new_str.rsplit("/")[-2].strip()
            types = new_str.rsplit("/")[-1].strip()
            director = re.match(r"导演: ([a-zA-Z\u4e00-\u9fa5·]+)(.*?)", new_str).group(1)

            try:
                actor = re.match(r"(.*?)主演: ([a-zA-Z\u4e00-\u9fa5·]+)(.*?)", new_str).group(2)
            except Exception as e:
                actor = "no"

            fp.write(
                film_name + "#" + y + "#" + country + "#" + types + "#" + director + "#" +
                actor + "#" + score + "#" + quote + "\n")  # 连接信息,连接符最好采用不常见的符号防止误读取
            print(film_name, y, country, types, director, actor, score, quote)

    fp.close()

在这里插入图片描述

  • 爬取图片

import os.path
import fake_useragent
import requests
from lxml import etree
# UA伪装
head = {
    "User-Agent": fake_useragent.UserAgent().random#自动伪装
}
pic_name = 0
def request_pic(url):
    # 2、发送请求
    response = requests.get(url, headers=head)
    # 3、获取想要的数据
    res_text = response.text
    # 4、数据解析
    tree = etree.HTML(res_text)
    li_list = tree.xpath("//div[@class='slist']/ul/li")#获取所有的照片信息
    for li in li_list:
        # 1、获取照片的url
        img_url = "https://pic.netbian.com" + "".join(li.xpath("./a/img/@src"))#img/@src,代表img的src属性
        # 2、发送请求
        img_response = requests.get(img_url, headers=head)
        # 3、获取想要的数据
        img_content = img_response.content
        global pic_name
        with open(f"./picLib/{pic_name}.jpg", "wb") as fp:#命名照片名称,并写下
            fp.write(img_content)
        pic_name += 1
if __name__ == '__main__':
    if not os.path.exists("./picLib"):#若没有一个此文件夹,建立一个文件夹存放照片
        os.mkdir("./picLib")
    # 1、url
    url = "https://pic.netbian.com/4kdongman/"
    request_pic(url)
    for i in range(2,10):#之后照片的url
        next_url = f"https://pic.netbian.com/4kdongman/index_{i}.html"
        request_pic(next_url)
    pass

在这里插入图片描述

标签:xpath,网页,url,tree,爬虫,li,爬取,print,div
From: https://blog.csdn.net/mohanyelong/article/details/140588189

相关文章

  • 爬取前 250 部电影 IDMb 中的数据
    拜托,我需要有人帮助我。我不明白为什么我只爬取25部电影而不是250部电影。我的代码:importpandasaspdimportrequestsfrombs4importBeautifulSoupheaders={'User-Agent':'Mozilla/5.0(WindowsNT10.0;Win64;x64)AppleWebKit/537.36(KHTML,likeGecko)C......
  • 计算机毕业设计hadoop++hive微博舆情预测 微博舆情分析 微博推荐系统 微博预警系统 微
    本科毕业论文论文题目:基于Hadoop的热点舆情数据分析与可视化                                                      姓名:      金泓羽       学号:   20200804050115   ......
  • 计算机毕业设计Python+Spark新能源汽车推荐系统 汽车大数据 汽车数据分析 汽车可视化
    表2黄河交通学院本科毕业设计(论文)开题报告学生姓名刘丹杰专业班级20本大数据一班学号2080910T01521设计(论文)题目基于Hadoop的新能源汽车销售数据分析系统的设计与实现选题的目的和意义:选题目的:新能源汽车销售数据分析系统的设计与实现旨在利用Hadoop等大数......
  • 陷入尝试网络爬取PrizePicks CS2道具的困境
    我正在尝试从Prizepicks中抓取CS2道具,但它卡在了一段代码上,我不知道如何修复这部分。我尝试使用api东西,但它对我来说效果不太好,所以我尝试从app.prizepicks中提取它。任何建议将不胜感激,因为我真的不知道还能做什么。下面是代码:frompathimportPathfromselenium......
  • python—爬虫的初步了解
    Python爬虫(WebScraping)是一种自动化从网站上提取数据的技术。Python由于其简洁的语法、丰富的库和强大的社区支持,成为了实现网络爬虫的首选语言之一。下面是一些Python爬虫的基本概念和步骤:1.爬虫的基本概念请求(Request):爬虫向服务器发送的请求,通常包括URL、HTTP方法(如......
  • js删除网页中图片width 和 height
    js删除网页中图片width和height更新日期:2024-06-1423:14:36来源:网络js删除网页中图片width和height一段代码轻松搞定适用于:电脑端网页带图片属性导致移动网页显示错位/错误备注:需搭配jquery.min.js(注!jquery-2.0以上版本不再支持IE6/7/8)并不是最新的版本就......
  • 【Python爬虫学习】7个好玩有趣的爬虫教程!(附源码)
    本文介绍了7个Python爬虫小案例,包括爬取豆瓣电影Top250、猫眼电影Top100、全国高校名单、中国天气网、当当网图书、糗事百科段子和新浪微博信息,帮助读者理解并实践Python爬虫基础知识。在文章开始之前先给大家简单介绍一下python爬虫1.什么是爬虫?简单介绍爬虫爬虫的......
  • Python 爬虫技术 第01节 引言
    引言网络爬虫的概念和重要性网络爬虫(WebCrawler),也称为网络蜘蛛(WebSpider)或机器人(Bot),是一种自动浏览互联网并收集信息的程序。它们按照一定的规则,从一个网页链接到另一个网页,遍历整个网络,抓取所需的数据或信息。网络爬虫是搜索引擎、数据分析、市场研究、新闻聚合、学术......
  • 零基础入门:创建一个简单的Python爬虫管理系统
    摘要:本文将手把手教你,从零开始构建一个简易的Python爬虫管理系统,无需编程基础,轻松掌握数据抓取技巧。通过实战演练,你将学会设置项目、编写基本爬虫代码、管理爬取任务与数据,为个人研究或企业需求奠定坚实基础。一、前言:数据之海,从何舀水?在这个信息爆炸的时代,数据如同海洋,而......
  • python爬虫实现简单的代理ip池
    python爬虫实现简单的代理ip池我们在普通的爬虫过程中经常遇到一些网站对ip进行封锁的下面演示一下普通的爬虫程序使用requests.get爬取数据这段代码是爬取豆瓣排行榜的数据,使用f12来查看请求的url和数据格式代码defrequestData():#爬取数据的urlurl:s......