Pyhton爬虫之requests与BeautifulSoup

requests与BeautifulSoup基础入门

1. 前言

最近在学习python爬虫,以前实现python爬虫,主要是使用较为底层的urllib和urllib2来实现的,这种方法最原始,编码起来也比较困难。而采用requests + BeautifulSoup的实现方案,可以简化代码的书写。如果有不好和错误的地方希望大佬指出。

2. 介绍

  1. 在使用这两个模块之前,需要对这两个模块做一些介绍:requests是基于urllib,采用 Apache2 Licensed 开源协议的 HTTP 库,比 urllib 更加方便。BeautifulSoup是一个可以从HTML或XML文件中提取数据的Python库,实际上,它将html中的tag作为树节点进行解析。
  2. requests官方文档:http://docs.python-requests.org/zh_CN/latest/user/quickstart.html
  3. BeautifulSoup官方文档:https://www.crummy.com/software/BeautifulSoup/bs4/doc/index.zh.html

3. 实现代码

首先是引入这2个库,这里我使用的是PyCharm编辑器,通过Settings→Project: WorkSpace→Project Interpreter寻找bs4和requests库。pip方法引入第三方库请自行百度。


bs4库
requests库

先从最简单的开始,点进糗事百科首页

import requests # 导入requests模块
res = requests.get("http://www.qiushibaike.com") # 获取糗事百科首页
print (res.text) # print(res)打印的是响应码,print(res.text)打印的是首页的源代码

得到页面源码,如果发现页面文字是乱码,则是编码的原因,输出页面的编码

print (res.encoding)
编码

如果不是UTF-8,可以设置为UTF-8

res.encoding = "utf-8"

点进一篇文章,按F12进入开发者工具,按住ctrl+shift+c或者是点击左上角的剪头选中页面中的文章

选择元素

发现其class是content

content
# 获取文章内容
import requests
from bs4 import BeautifulSoup
res = requests.get("https://www.qiushibaike.com/article/119567920")
soup = BeautifulSoup(res.text, "html.parser") # 把我们需要的内容放到BeautifulSoup中,html.parser是一个解析器
div = soup.find_all(class_="content")[0] # 找寻class为content的内容
print(div.text.strip()) # 输出文章内容
内容

如果要获取首页一页的文章内容,则通过开发者工具查看首页,发现每个文章的页面class为article block untagged mb15 typs_xxxx

article block untagged mb15 typs_xxxx

用re来匹配各种文章的class。
Python3正则表达式:http://www.runoob.com/python3/python3-reg-expressions.html

# 获取所有文章的内容
import requests
from bs4 import BeautifulSoup
import re

res = requests.get("http://www.qiushibaike.com")
soup = BeautifulSoup(res.text, "html.parser")
divs = soup.find_all(class_=re.compile(r'article block untagged mb15 typs_(\w*)')) # 所有文章是一个数组
for div in divs: # 循环取出
    joke = div.span.get_text()
    print(joke.strip())
    print("------")

输出内容后发现有些内容读起来很奇怪,看页面发现有些是有图片的,图片的网页标签(HTML tag)是img。

picture

所以我们要把有图片的文章过滤掉,发现有图片文章有个class为thumb,则我们把有图片的过滤掉

thumb
# 获取一页没有图片的文章
import requests
from bs4 import BeautifulSoup
import re

res = requests.get("http://www.qiushibaike.com")
soup = BeautifulSoup(res.text, "html.parser")
divs = soup.find_all(class_=re.compile(r'article block untagged mb15 typs_(\w*)')) # 匹配class
for div in divs:
    if div.find_all(class_="thumb"): # 如果有图片则过滤
      continue
    joke = div.span.get_text()
    print(joke.strip())
    print("------")

但是糗事百科有很多页,点击第二页发现网址为:https://www.qiushibaike.com/8hr/page/2/ ,点击第三页发现网址为:https://www.qiushibaike.com/8hr/page/3 ,所以我们只需要将网址最后的数字变动即可得到其他页面

# 获取前几页的文章
import requests
from bs4 import BeautifulSoup
import re

base_url = "https://www.qiushibaike.com/8hr/page/"
for num in range(1, 3): # 设置循环,让num分别等于1-3,获取前3页内容
    print('第{}页:'.format(num))
    res = requests.get(base_url + str(num))  # 这里对网址后面加上数字
    soup = BeautifulSoup(res.text, "html.parser")
    divs = soup.find_all(class_=re.compile(r'article block untagged mb15 typs_(\w*)'))
    for div in divs:
        if div.find_all(class_="thumb"):
            continue
        joke = div.span.get_text()
        print(joke.strip())
        print("------")
    print("\n\n\n\n\n\n\n")
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,701评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,649评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,037评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,994评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,018评论 6 395
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,796评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,481评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,370评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,868评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,014评论 3 338
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,153评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,832评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,494评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,039评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,156评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,437评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,131评论 2 356

推荐阅读更多精彩内容

  • 声明:本文讲解的实战内容,均仅用于学习交流,请勿用于任何商业用途! 一、前言 强烈建议:请在电脑的陪同下,阅读本文...
    Bruce_Szh阅读 12,712评论 6 28
  • GitHub 上有一个 Awesome - XXX 系列的资源整理,资源非常丰富,涉及面非常广。awesome-p...
    若与阅读 18,660评论 4 418
  • Python爬虫入门(urllib+Beautifulsoup) 本文包括:1、爬虫简单介绍2、爬虫架构三大模块3...
    廖少少阅读 9,838评论 0 6
  • 环境管理管理Python版本和环境的工具。p–非常简单的交互式python版本管理工具。pyenv–简单的Pyth...
    MrHamster阅读 3,797评论 1 61
  • 劳资虚了,怎么办,不知道怎么办,劳资还要当你的小仙女呢,...怎么办,好想颓废,废,废,,怎么办,谁给我个信仰。
    这里Cc阅读 91评论 0 0