【Python3.6爬虫学习记录】(二)使用BeautifulSoup爬取简单静态网页文章

前言:自学第二天,大致搞懂,要学什么,要怎么学的问题。
与我而言,主要是针对一些库来循序渐进:requests(urllib)->BeautifulSoup(re,xpath)->selenium(PhantomJS)->scrapy

某乎看到的最好的答案:
【Python3.6爬虫学习记录】(二)使用BeautifulSoup爬取简单静态网页文章_第1张图片
如何入门Python爬虫?-知乎

BeautifulSoup的安装:
命令提示符程序下输入:

    pip install beautifulsoup4

lxml的安装:
安装没有想象的那么简单,直接如下安装会出现错误

    pip install lxml

正确的姿态是这样的:
1,安装wheel,命令行运行:

 pip install wheel

2,检查pip支持的版本,IDE中运行:

import pip
print(pip.pep425tags.get_supported())

【Python3.6爬虫学习记录】(二)使用BeautifulSoup爬取简单静态网页文章_第2张图片
3, 在这里下载对应的.whl文件,注意别改文件名!
【Python3.6爬虫学习记录】(二)使用BeautifulSoup爬取简单静态网页文章_第3张图片
4,进入.whl所在的文件夹(建议直接放在命令行程序最开始出现的文件夹,本人是:C:\Users\lenovo>),执行命令即可完成安装pip install 带后缀的完整文件名(本人是:lxml-3.8.0-cp36-cp36m-win32.whl)

pip install lxml-3.8.0-cp36-cp36m-win32.whl

爬虫实践:
一,BeautifulSoup的使用
详细教程点这里,
不用全部看,只用大致了解,用到的时候再查。我照着打了一部分:

 print(soup.prettify()) # 格式化输出网址源码

# 打印title,用soup加标签名轻松获得标签内容,而不需要用正则表达式
 print(soup.title)
 print(soup.head)
 print(soup.p)  #只打印第一个p的部分
 print(soup.div.attrs) # 打印div标签的所有属性,得到的类型是一个字典
 print(soup.div['class']) # 但单独打印div的某一个部分
 print(soup.title.string)  # .string获得标签内部的文字

# 遍历文档树
# 直接子节点 .contents  .children
 print('直接子节点')
 for child in soup.body.children :
    print(child)
# 用来遍历
# 所有子孙节点 .descendans   包括其内部所有内容
 print('所有子孙节点')
 for child in soup.body.descendants:
    print(child)
# 所有父节点 .parents
# 所有兄弟节点 .next_siblings   .previous_siblings
# 所有前后节点 .next_elements  .previous_elements

# 节点内容 .string (s)s

# 搜索文档树
# 注意:如果一个指定名字的参数不是搜索内置的参数名,
# 搜索时会把该参数当作指定名字tag的属性来搜索,
# 如果包含一个名字为 id 的参数,Beautiful Soup会搜索每个tag的”id”属性

二,实践代码-抓取简书文章

# 爬虫利器-BeautifulSoup--抓取简书文章
# 首先导入bs4库
from bs4 import BeautifulSoup
import requests

url = 'http://www.jianshu.com/p/82833d443e76'
# 获得网址源码
html = requests.get(url).content
soup = BeautifulSoup(html, 'lxml') 

print('开始抓取')
title = soup.title.string
with open(title+'.txt', 'w') as f:
    href = soup.find_all('p')
    try:
        f.write('\t%s\r\n' %str(title)) #前面%s 后面之间空格加%内容
        for hre in href:
            if(hre.string!=None):       #未解决标签内容回车后打印none问题
                f.write('\t%s\r\n' %str(hre.string))
    except Exception:
        print('发生错误')
print('抓取成功')

你可能感兴趣的:(Python)