Python简单爬虫入门三

我们继续研究BeautifulSoup分类打印输出

Python简单爬虫入门一

Python简单爬虫入门二

前两部主要讲述我们如何用BeautifulSoup怎去抓取网页信息以及获取相应的图片标题等信息,

等于我们已经只知道如何用工具去浏览和检索内容,但是实现只有你知道抓取的是什么,这时候

我们需要整理分类,给他们命名以及分类这样打印出来别人一看就知道标题是什么,内容是什么

#!usr/bin/env python
# -*- coding:utf-8 -*-
from bs4 import BeautifulSoup
import requests
import json

headers ={
    'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',
    # 'Cookie':'CNZZDATA1260535040=242528197-1478672438-null%7C1478672438',
}
url= 'http://www.beiwo.tv/index.php?s=vod-search-id-14-tid--area--year-$search_year-order-gold.html'

wb_data = requests.get(url,headers=headers)
soup = BeautifulSoup(wb_data.text,'lxml')
imgs = soup.select(" ul.img-list.clearfix > li > a > img ")
titles = soup.select(" ul.img-list.clearfix > li > h5 ")
yanyuans = soup.select(" ul.img-list.clearfix > li > p")
stars = soup.select(" p.star > em")

J_data = {}
count = 0
for title,img,yanyuan,star in zip(titles,imgs,yanyuans,stars):
    data = {
        "title":title.get_text(),
        "img":img.get("src"),
        "演员":list(yanyuan.stripped_strings),
        "评分":star.get_text(),
    }
    J_data[count] = data
    count += 1
    print(data)

with open("test.txt",'w') as f:
    f.write(json.dumps(J_data))

我就直接把完整代码发出来一点点来说:

首先还是标准格式导入相应方法这里我多加了json用来保存抓去的数据,就用来放入txt文件内

headers伪装浏览器头文件简写方式,url是你抓去网页的地址(现在很多网站都有反爬保护越来越难爬取信息)

requests请求网页服务返回的数据wb_data给BeautifulSoup去解析用lxml格式

抓去的信息如下titles标题imgs图片yanyuans演员stars评分都加了s是因为返回的是抓去的每项全部相关信息以列表返回

J_data字典后面保存时的格式,count用来计数顺便用来当字典的Key键值,zip的方法我简单介绍如下:

可以把两个列表同一位置的值一一对应以元组返回行成新列表的方法在这里我是用他来分类输出我们抓去相应信息

最后用了常用的写入方法with可以不用写文件close关闭,处理完它会收拾后面操作,来看效果如下:

这里我们整理所有想要的数据及分类,这样打印出来相信给其它人看也知道是什么,由于评分与演员放在一个标签下所以没有演员名时会有点BUG

在来看看txt文档内保存了什么如下:

很多人说报错乱码什么的,其实u6f14就是中文只是用unicode的编码的格式写入文本如果你在反向读取还是可以正常打印出来的(由于文件太长没法截取)

我们就在新建一个py文件简单教一下如何读取文件内容代码如下:

#!/usr/bin/env python
# -*- coding:utf-8 -*-

import json

with open('test.txt','r') as f:
    dic = json.loads(f.readline())
    
for i in range(len(dic)):
    print(dic[str(i)])

导入json的方法模块

打开文件test.txt模式r读取并且命名f (上面生成的test.txt目录是当前目录,也就是3个文件是放在一起的,如果要写在其它地方请写相对路径)

由于只有一行所以f.readline()读取刚才大家看到unicode编码的文件以json.load的方式读取,你是以json.dumps写入所以读取相应,返回的类型字典dic

用一个循环来通过字典的key来看到value就是刚才的内容效果如下:

目前已经把基本的BeautifulSoup的基础用法方法讲完了,其实还可以做很多扩展比如把抓去的数据存入mysql或其它数据库等,写入xls表格,由于我这里主要介绍BeautifulSoup,没有介绍到,但是可以做就当扩展练习吧

大家可以去学习数据库的基本用法和语句在结合这个爬去存放,也可以学习python表格的第三方模块把数据写入excel内这样也可以显得更加专业。最后还是提醒只有多练习才能熟练运用这些工具,并且发现问题,

思考,解决与提高。最后也感谢能观看到此的同学和朋友们,我也会随后时不时更新讲解更好用的库与方法。

原文地址:https://www.cnblogs.com/cookie1026/p/6082528.html