【Python】爬虫入门

import requests
response=requests.get("https://books.toscrape.com/")
if response.ok:
    print(response.text)
else:
    print("请求失败")

requests库,用来构建和发送HTTP请求,需要提前安装,指令:

pip install requests

 requests.get会返回一个响应码,含义可以对应查询:

HTTP 响应状态码 - HTTP | MDN (mozilla.org)

譬如:

418就说明网站只对浏览器提供服务,而我们用的是程序,就需要把程序伪装成浏览器。

【Python】爬虫入门_第1张图片

指定User-Agent 

import requests
headers={
    "User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36 Edg/120.0.0.0"
}
response=requests.get("https://movie.douban.com/top250",headers=headers)
if response.ok:
    print(response.text)
else:
    print("请求失败")

 请求头的User-Agent里面会给服务器提供一些客户端的信息,所以要去指定User-Agent的值。指定成什么?

1.鼠标右键,点击检查

【Python】爬虫入门_第2张图片

2.点击网络

【Python】爬虫入门_第3张图片

3.刷新网页,任意点击一条请求

【Python】爬虫入门_第4张图片

4.翻找到User-Agent:,复制右边的内容即可。

【Python】爬虫入门_第5张图片

 什么是HTML网页结构?

一个网页有三大技术要素,HTML,CSS和JavaScrip。爬虫时最关心的是网页上的数据信息,所以主要和HTML打交道。

【Python】爬虫入门_第6张图片

【Python】爬虫入门_第7张图片

 HTML常用标签类型

【Python】爬虫入门_第8张图片

表格: 

【Python】爬虫入门_第9张图片

练习HTML常用标签 

 在VSCode里新建文本文件

【Python】爬虫入门_第10张图片

整体缩进快捷键 CTRL+]



    
        标题
    

    
        

一级标题

二级标题

六级标题

文本段落 文本段落

文本段落

文本段落

文本段落文本段落

我的博客
  1. num1
  2. num2
  • 1
  • 2
Y y
X XY Xy
x xY xy

 效果:标题

【Python】爬虫入门_第11张图片

Beautiful soup

手动从HTML里找信息效率太低,Python有一个可以用来做HTML解析的库。

安装:

pip install bs4

引入:

from bs4 import BeautifulSoup

BeautifulSoup把看起来复杂的HTML内容解析成类似的树状结构:

【Python】爬虫入门_第12张图片

 All products | Books to Scrape - Sandbox

 提取网页的全部价格、书名:

from bs4 import BeautifulSoup

import requests
headers={
    "User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36 Edg/120.0.0.0"
}
content = requests.get("https://books.toscrape.com/",headers=headers).text
soup = BeautifulSoup(content,"html.parser")

all_prices=soup.findAll("p",attrs={"class": "price_color"})#findAll返回可迭代对象

for price in all_prices:
    print(price.string[2:])#string返回标签包围的文字

all_titles=soup.findAll("h3")#findAll返回可迭代对象
'''
for title in all_titles:
    all_names=title.findAll("a")
    for name in all_names:
        print(name.string)
'''
for title in all_titles:
    all_names=title.find("a")#find返回第一个对象
    print(all_names.string)

 【Python】爬虫入门_第13张图片

 【Python】爬虫入门_第14张图片

实战

 爬取豆瓣电影top250

豆瓣电影 Top 250 (douban.com)

from bs4 import BeautifulSoup
import requests
headers={
    "User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36 Edg/120.0.0.0"
}
for start_num in range(0,250,25):
    response = requests.get(f"https://movie.douban.com/top250?start={start_num}",headers=headers)
    html=response.text

    soup = BeautifulSoup(html,"html.parser")
    all_texts=soup.findAll("span",attrs={"class": "title"})#findAll返回可迭代对象
    for text in all_texts:
        s=text.string
        if "/" not in s:
            print(s)

你可能感兴趣的:(Python,python,爬虫)