爬虫笔记(一)

本文介绍HTML的基本概念及其在网页描述中的应用,并分享了简单的Python爬虫实现方法,包括使用requests和BeautifulSoup抓取网页数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

预备知识

HTML

www.w3school.com.cn/html/html_j…

  • 全称:超文本标记语言
  • 标记语言:一套标记标签(markup language)
  • 作用:使用标记标签描述网页

HTML标签

  • 成对出现
  • 是<>括起的关键词

HTML 文档=网页

<html>
<body>
<h1>此处文本被显示为标题</h1>
<p>此处文本被显示为段落</p>
</body>         #body之间的文本是可见页面内容
</html>         #html之间的文本是描述页面
复制代码

XML

www.w3school.com.cn/xml/xml_int…

HTML 被设计用来显示数据。

XML 被设计用来传输和存储数据。XML 标签没有被预定义,需要自行定义标签。

安装requests和beautifulsoup4过程中出现的问题

1)报错:需要升级pip;

2)升级pip报错:No module named pip

原因:windows的命令权限不足

解决方法:右键命令提示符程序,以管理员身份运行 ,切换到python的安装包目录,不要进入scripts,再执行:python -m pip install --upgrade pip

pip的使用

  • 安装:pip install 模块名
  • 卸载:pip uninstall 模块名
  • pip 安装模块无法运行->easy_install(同pip)
  • pip、easy_install都不可行:官网下源码安装或找官网上的一键安装包后缀名msi。有时需安装类似VCforpython的环境文件

使用Pycharm安装Python第三方库

File->settings->project->project Interpreter->点击上面界面右上角的“+”->在搜索框中搜索需要安装的第三方库->点击界面左下角的Install Package进行安装即可

注意:安装的版本要匹配Python版本

简单爬虫

注意

编码格式问题
  • Python3默认utf8,Python默认的编码格式不能识别汉字

  • 数据乱码:可能是数据使用gbk2312或gbk编码,而Python3默认utf8,解码方式错误

  • html文本编码格式会声明在响应头和html的head标签的meta标签里。 有时响应头可能没有声明编码

    解决方法->使用chardet模块自动识别

爬虫被识别
  • requests 模块在生成请求时不带Cookie,User-Agent写为python

解决方法->修改requests请求头部

headers = {
     "User-Agent": "",
    "Cookie": ""}
response = requests.get(URL, headers=headers)
复制代码
用XPath遍历html文档
  • 教程:www.w3school.com.cn/xpath/index…
  • 原因:BeautifulSoup模块通过标签的class,id等属性锁定标签的位置,但有的标签压根就没有class和id属性用,XPath允许通过多渠道定位目标,可用XPath来定位标签。
  • 优点:BeautifulSoup直接去根据class定位标签,若想改成根据标签名定位标签,需要修改python代码、调用的BeautifulSoup的方法和传进去的参数;使用XPath定位,则只需改变传进去的参数,甚至可以把XPath存进数据库,改动时打开数据库即可。

流程:数据获取->数据处理->数据存储

示例(获取和处理)

import requests
from bs4 import BeautifulSoup
html=requests.get('https://movie.douban.com/top250?start=0')
soup = BeautifulSoup(html.text, 'html.parser')
for item in soup.find_all('div',"info"):
    title=item.div.a.span.string #获取标题
    yearline=item.find('div','bd').p.contents[2].string #获取年份那一行
    yearline=yearline.replace(' ','') #去掉这一行的空格
    yearline=yearline.replace('\n','') #去掉这一行的回车换行
    year=yearline[0:4] #只取年份前四个字符  
    print(title,'\t',year)
复制代码
利用for循环自动采集10个页面的数据
import requests
from bs4 import BeautifulSoup
start=0
for n in range(0,10):
    html=requests.get('https://movie.douban.com/top250?start='+str(start))
    start+=25
    soup = BeautifulSoup(html.text, 'html.parser')
    for item in soup.find_all('div',"info"):
        title=item.div.a.span.string #获取标题
        yearline=item.find('div','bd').p.contents[2].string #获取年份那一行
        yearline=yearline.replace(' ','') #去掉这一行的空格
        yearline=yearline.replace('\n','') #去掉这一行的回车换行
        year=yearline[0:4] #只取年份前四个字符  
        print(title,'\t',year)
复制代码
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值