【自用】Python爬虫学习(一):爬虫基础与四个简单案例


基础知识

对于一个网页,浏览器右键可以查看页面源代码,但是这与使用开发者工具的检查看到的结果不一定相同。
在这里插入图片描述

  • 服务器渲染:相同则说明应该是服务器渲染,在页面看到的数据,源代码中就有,服务器将所有数据一并发送给客户端。只需要对网页进行请求,获得页面数据后对感兴趣内容进行数据解析即可。
  • 客户端渲染:不一样则说明应该是客户端渲染,右键看到的页面源代码只是简单的html框架,数据信息是服务器单独再次发送,经客户端注入重新渲染的结果。

想要获取第二种类型的网页数据,需要用到浏览器的抓包工具。
如下所示,页面中含有“美丽人生”,但右键查看页面源代码,使用Ctrl+F搜索却没有该文本,说明该网页应该就属于第2种类型,即客户端渲染。
在这里插入图片描述
那么包含“美丽人生”的文本在哪里呢?在该页面右键点击最下面的检查,或者直接按F12键打开开发者工具。
在这里插入图片描述
依次点击左侧红色方框中的条目内容,查看右侧预览信息,发现第二个就应该是我们需要的内容,其中就有“美丽人生”的文本。
在这里插入图片描述
确定好之后,点击右侧的标头,目前需要关注这几个部分的信息。
在这里插入图片描述
编写代码尝试获取预览的数据信息

import requests

url = 'https://movie.douban.com/j/chart/top_list?type=24&interval_id=100%3A90&action=&start=0&limit=20'

herders = {
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36 Edg/127.0.0.0'
}

resp = requests.get(url=url, headers=herders)

print(resp.text)

运行结果:
在这里插入图片描述
可以看到,已经获取到预览中看到的所有数据,但略显杂乱,后续只需要对该部分内容进行感兴趣提取就行,显然这是python基础,与爬虫无关了,毕竟已经获取到了数据。

例如,只获取电影名称与评分,示例代码如下:

import requests

url = 'https://movie.douban.com/j/chart/top_list?type=24&interval_id=100%3A90&action=&start=0&limit=20'

herders = {
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36 Edg/127.0.0.0'
}

resp = requests.get(url=url, headers=herders)
content_list = resp.json()

for content in content_list:
    movie_name = content['title']
    movie_score = content['score']
    print(f'《{movie_name}》, 评分:{movie_score}')

运行结果:
在这里插入图片描述

四个简单的爬虫案列

1.使用urlopen获取百度首页并保存

from urllib.request import urlopen

resp = urlopen('http://www.baidu.com')

with open('baidu.html', mode='w', encoding='utf-8') as f:
    f.write(resp.read().decode('utf-8'))

2.获取某翻译单词翻译候选结果

在这里插入图片描述

参考源码:

import requests

url = 'https://fanyi.baidu.com/sug'

name = input('请输入你要查询的单词:')
data = {
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36 Edg/127.0.0.0',
    'kw': name
}

resp = requests.post(url, data=data)

fanyi_result = dict(resp.json()['data'][0])['v']
print(fanyi_result)

resp.close()

3.获取某网页中的书名与价格

在这里插入图片描述
参考源码:

import requests
from bs4 import BeautifulSoup

headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36 Edg/127.0.0.0"
}
url = "http://books.toscrape.com/"
response = requests.get(url=url, headers=headers)
if response.ok:
    response = requests.get("http://books.toscrape.com/")
    print(response.status_code)  # 状态代码,200为请求成功
    content = response.text
    # 参数"html.parser"表明解析的是html
    soup = BeautifulSoup(content, "html.parser")

    # 获取网站中书本的价格信息:根据属性查找对应的p标签,返回的结果为可迭代对象
    all_prices = soup.find_all("p", attrs={"class": "price_color"})
    # print(list(all_prices))
    print("=====书本价格:=====")
    for price in all_prices:
        # 利用price.string可以只保留html标签中的文本内容,再利用字符串的切片得到价格
        print(price.string[2:])
    print("=====书本名称:=====")
    # 获取网站中书名信息
    all_titles = soup.find_all("h3")
    for title in all_titles:
        all_links = title.findAll("a")
        for link in all_links:
            print(link.string)

    response.close()
else:
    print("请求失败")

4.获取某瓣排名前250的电影名称

在这里插入图片描述
参考源码:

import requests
from bs4 import BeautifulSoup

# 获取豆瓣排名前250的电影名称

# 浏览器标识
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36 Edg/127.0.0.0"
}

i = 1
for start_num in range(0, 250, 25):
    # print(start_num)

    response = requests.get(f"https://movie.douban.com/top250?start={start_num}", headers=headers)
    # print("服务器响应状态码:", response.status_code)
    response.encoding = "UTF-8"  # 指定字符集

    if response.ok:  # 如果服务器响应正常执行下面代码
        douban_top250_html = response.text
        soup = BeautifulSoup(douban_top250_html, "html.parser")

        # all_titles = soup.find_all("span", attrs={"class": "title"})
        all_titles = soup.find_all("span", class_="title")  # 两种写法效果都一样

        for title in all_titles:
            title_string = title.string
            if "/" not in title_string:
                print(f"{i}:\t《{title.string}》")
                i = i + 1
    else:
        print("请求失败!")

    response.close()
要使用VS Code编写Python爬虫程序,您可以按照以下步骤进行操作: 1. 打开VS Code编辑器并创建一个新的Python文件。 2. 导入所需的库或模块,例如requests和BeautifulSoup。 3. 使用requests库发送HTTP请求来获取网页的内容,可以使用类似于下面的代码: ``` import requests url = 'https://www.example.com' response = requests.get(url) ``` 其中,`url`是您要爬取的网页的URL地址,`response`是服务器的响应内容。 4. 使用BeautifulSoup库解析网页的内容,可以使用类似于下面的代码: ``` from bs4 import BeautifulSoup soup = BeautifulSoup(response.text, 'html.parser') ``` 其中,`response.text`是上一步获取的网页内容,`soup`是解析后的BeautifulSoup对象。 5. 使用BeautifulSoup对象提取所需的数据,可以使用CSS选择器或XPath表达式来定位元素。例如,如果您想提取所有具有特定类名的元素,可以使用类似于下面的代码: ``` elements = soup.select('.classname') ``` 其中,`.classname`是您要提取的元素的类名。 6. 将提取的数据保存到文件中,可以使用类似于下面的代码: ``` with open('output.txt', 'w', encoding='utf-8') as f: for element in elements: f.write(element.text + '\n') ``` 其中,`output.txt`是保存数据的文件名,`element.text`是要保存的数据。 请注意,以上代码只是一个示例,您可以根据实际情况修改和扩展代码。另外,还可以使用其他库或工具来辅助编写和运行Python爬虫程序,例如使用Scrapy框架来构建更复杂的爬虫。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [python爬虫(vscode版,借鉴于知乎用户:干饭小熊猫,仅用于自用)](https://blog.csdn.net/qq_63075864/article/details/130465443)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Lucky_云佳

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值