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 ...
随机推荐
- ValueError: invalid literal for int() with base 10问题处理
问题描述: 在用pthon写脚本得过程中,发生错误,ValueError: invalid literal for int() with base 10,这种错误是值得类型转换错误,int()函数是可 ...
- soj#532 set p3175
传送门 分析 代码 #include<bits/stdc++.h> using namespace std; ; <<],Ans; int n,m,N; inline int ...
- JS 获取json key和value
var json= { "Type": "Coding", "Height":100 }; for (var key in json) { ...
- l1和l2正则化
https://blog.csdn.net/tianguiyuyu/article/details/80438630 以上是莫烦对L1和L2的理解 l2正则:权重的平方和,也就是一个圆 l1正则:权重 ...
- (转)关于SimpleDateFormat安全的时间格式化线程安全问题
想必大家对SimpleDateFormat并不陌生.SimpleDateFormat 是 Java 中一个非常常用的类,该类用来对日期字符串进行解析和格式化输出,但如果使用不小心会导致非常微妙和难以调 ...
- python 装饰器 对类和函数的装饰
#装饰器:对类或者函数进行功能的扩展 很多需要缩进的没有进行缩进'''#第一步:基本函数def laxi(): print('拉屎')#调用函数laxi()laxi() print('======= ...
- JavaScript DOM编程艺术-第一章
发现基础不是很好,补习一下.37买了2本书(dom编程和高级程序设计). 以前读书总是自己勾勾画画,有点没意思.现在写下来,说不定会成为传世经典.哈哈...........随便扯扯淡. 第一天(201 ...
- 绿盟扫出来个http host 漏洞
这个漏洞搞了大半天,想过从后台拦截,也想过从前台拦截,都是无从下手!网上也找了很多资料,有点乱,后来自己结合网上的办法,搞出如下解决办法:在tomcat server.xml里配置host 因为外网是 ...
- Apache Shiro 认证+授权(一)
1.核心依赖 <dependency> <groupId>org.apache.shiro</groupId> <artifactId>shiro-co ...
- CentOS 7虚拟机下设置固定IP详解
说明 1.笔记本主机IP为设置自动获取,不管什么情况下,不受虚拟机影响,只要连接外网就可以正常上网: 2.只要笔记本主机可以正常访问外网,启动虚拟机中的CentOS 7系统就可以正常访问外网,无需再进 ...