Python每日一题 008
题目
基于多线程的网络爬虫项目,爬取该站点http://www.tvtv.hk 的电视剧收视率排行榜
分析
robots.txt
User-agent: Yisouspider
Disallow: /wp-admin
User-agent: ChinasoSpider
Disallow: /
User-agent: MJ12bot
Disallow: /
User-agent: AhrefsBot
Disallow: /
User-agent: YandexBot
Disallow: /
一级URL:http://www.tvtv.hk/archives/category/dianshiju/page/1
二级URL格式:http://www.tvtv.hk/archives/8078.html
从一级URL页面中获取二级URL

分析二级URL页面下的内容获取数据:

代码
# coding:"utf-8"
import urllib.request
from bs4 import BeautifulSoup
import re
# 爬取网页内容
def download(url):
    print("正在爬取:", url)
    try:
        html = urllib.request.urlopen(url).read()
        html = BeautifulSoup(html, 'lxml')
    except urllib.request.URLError as e:
        print("爬取错误:", e.reason)
        html = None
    return html
# 获取下一级网页中的URL
def find_url(page, tag):
    page = str(page.find_all(tag))
    url_list = re.findall('<a href="(.*?)" rel="bookmark"', page)
    return url_list
# 爬取收视数据
def get_content(url_list):
    word_data = []
    for i in url_list:
        html = download(i)
        contents = html.find_all('p')
        word_data.extend(re.findall('<p>(.*?)</p>, <p>', str(contents)))
    return word_data
# 爬取图片
def img_data(url_list):
    img_src = []
    for j in url_list:
        html = download(j)
        contents = html.find_all('p')
        img_src.extend(re.findall('src="(.*?)"/></p>', str(contents)))
    return img_src
def write_content_tofile(filename1, filename2):
    # 保存文本内容
    with open(filename1, 'w+', encoding='utf-8') as f1:
        data = get_content(url_list)
        for i in data:
            f1.write(i + "\n")
    # 保存图片
    img = img_data(url_list)
    for j in range(len(img)):
        print('正在下载第'+str(j+1)+'张图片')
        path = str(j+1)
        with open(filename2 + path + '.jpg', 'wb') as f2:
            image_data = urllib.request.urlopen(img[j]).read()
            f2.write(image_data)
if __name__ == "__main__":
    url = "http://www.tvtv.hk/archives/category/dianshiju/page/1"
    filename1 = "E:\\1.txt"
    filename2 = "E:\\img\\"
    page = download(url)
    url_list = find_url(page, 'h2')
    write_content_tofile(filename1, filename2)
暂时只是爬取单个页面的内容,后续更新多线程以及批量爬取!
Python每日一题 008的更多相关文章
- Python:每日一题008
		
题目: 判断101-200之间有多少个素数,并输出所有素数. 程序分析: 判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除,则表明此数不是素数,反之是素数. 个人思路及代码: li ...
 - Python每日一题 004
		
将 0001 题生成的 200 个激活码(或者优惠券)保存到 Redis 非关系型数据库中. 代码 import redis import uuid # 创建实例 r=redis.Redis(&quo ...
 - Python每日一题 003
		
将 002 题生成的 200 个激活码(或者优惠券)保存到 MySQL 关系型数据库中. 代码 import pymysql import uuid def get_id(): for i in ra ...
 - Python每日一题 002
		
做为 Apple Store App 独立开发者,你要搞限时促销,为你的应用生成激活码(或者优惠券),使用 Python 如何生成 200 个激活码(或者优惠券)? 在此生成由数字,字母组成的20位字 ...
 - Python每日一题 009
		
题目 有个目录,里面是你自己写过的程序,统计一下你写过多少行代码.包括空行和注释,但是要分别列出来. 代码 参照网络上代码 # coding: utf-8 import os import re # ...
 - Python每日一题 007
		
题目 你有一个目录,放了你一个月的日记,都是 txt,为了避免分词的问题,假设内容都是英文,请统计出你认为每篇日记最重要的词. 很难客观的说每篇日记中最重要的词是什么,所以在这里就仅仅是将每篇日记中出 ...
 - Python每日一题 006
		
题目 你有一个目录,装了很多照片,把它们的尺寸变成都不大于 iPhone5 分辨率的大小. 如果只是单纯的通过将图片缩放到iPhone5分辨率大小,显然最后呈现出来的效果会很糟糕.所以等比例缩放到长( ...
 - Python每日一题 005
		
任一个英文的纯文本文件,统计其中的单词出现的个数. 代码 # coding:utf-8 import re def get_word(filename): fp=open(filename," ...
 - Python每日一题 001
		
Github地址:https://github.com/Yixiaohan/show-me-the-code Talk is Cheap, show me the code. --Linus Torv ...
 
随机推荐
- 【Linux】ssh执行远程命令awk 参数报错问题
			
ssh ip sudo docker ps -a | grep none | awk '{print \$1}'| sed 's/%//g' $1前面加上转移符就好
 - error C2664: “ATL::CStringT<BaseType,StringTraits>::Remove”: 不能将参数 1 从“const char [2]”转换为“char”
			
转自VC错误:http://www.vcerror.com/?p=1395 问题描述: 代码: CString str("asdfafda"); str.Remove(" ...
 - Microsoft Office Excel
			
解除合并,并复制原始值到每一个解除合并后的单元格 对齐方式 -> 合并后居中 -> 取消单元格合并 编辑 -> 查找和选择 -> 定位条件 -> 空值 输入=然后按↑选择 ...
 - vue 页面添加水印 ts
			
"use strict"; // tslint:disable-next-line: only-arrow-functions const setWatermark: (str: ...
 - XAMPP【phpmyadmin】外网访问被拒绝解决办法
			
问题场景: 在阿里云搭建一个apache服务器,正常访问XAMPP目录下的页面. 服务器本地是可以正常访问的 但是远程 就不可以访问了: 出现这样的画面: 解决方法 1.按照提示找到httpd-xam ...
 - Python 与 C 对比
			
到目前为止,我接触最多两种语言应该就是python 和 C 语言了. 个人理解 1. 执行速度不同, python为解释性语言,C是编译型语言(需要编译器) 2. python 是基于C的实现,C中很 ...
 - 超強的Linux指令解釋網站《explainshell.com》,學Linux必備!
			
ExplainShell 官方網站:http://explainshell.com/ 原始碼下載:https://github.com/idank/explainshell 用瀏覽器打該explain ...
 - 【ARC076F】 Exhausted
			
hall定理大概是匈牙利的理论基础吧 hall定理的内容:二分图\(G\)的的左部点点集为\(\rm X\),右部点点集为\(\rm Y\),设\(|\rm X|\leq |Y|\),则二分图\(G\ ...
 - Centos设置自带中文输入法
			
1.点击屏幕左上角的[系统应用程序]->[系统工具]->[设置] 2.在弹出的设置对话窗中选择Region&language 3.在弹出的[区域和语言]对话窗中,点击左下角“+”, ...
 - java中垃圾收集的方法有哪些?
			
java中垃圾收集的方法有哪些? 一.引用计数算法(Reference Counting) 介绍:给对象添加一个引用计数器,每当一个地方引用它时,数据器加1:当引用失效时,计数器减1:计数器为0的即可 ...