天善智能网络爬虫学习~
来源:互联网 发布:技术影响力 知乎 编辑:程序博客网 时间:2024/05/16 04:46
#http://www.maoyan.com-榜单-top100,通过改变offset=10、20...这个参数实现翻页#1、抓取单页内容:利用requests请求目标站点,得到单个网页HTML代码,返回结果#2、正则表达式:根据HTML代码分析得到电影的名称、主演、上映时间、评分、图片链接等信息#3、保存至文件:通过文件的形式结果保存,每一部电影一个结果一行Json字符串#4、开启循环及多线程:对多页内容遍历,开启多线程提高抓取速度import requestsimport refrom requests.exceptions import RequestExceptiondef get_one_page(url):try:response = requests.get(url)if response.status_code == 200:return response.textreturn Noneexcept RequestException:return None
def main():url = 'http://maoyan.com/board/4?'html = get_one_page(url)print(html)if __name__ == '__main__':main()
打印出的结果:10部电影
<i class="board-index board-index-10">10</i> <a href="/films/1212" title="千与千寻" class="image-link" data-act="boarditem-click" data-val="{movieId:1212}"> <img src="//ms0.meituan.net/mywww/image/loading_2.e3d934bf.png" alt="" class="poster-default" /> <img data-src="http://p0.meituan.net/movie/9bf7d7b81001a9cf8adbac5a7cf7d766132425.jpg@160w_220h_1e_1c" alt="千与千寻" class="board-img" /> </a> <div class="board-item-main"> <div class="board-item-content"> <div class="movie-item-info"> <p class="name"><a href="/films/1212" title="千与千寻" data-act="boarditem-click" data-val="{movieId:1212}">千与千寻</a></p> <p class="star"> 主演:柊瑠美,入野自由,夏木真理 </p><p class="releasetime">上映时间:2001-07-20(日本)</p> </div> <div class="movie-item-number score-num"><p class="score"><i class="integer">9.</i><i class="fraction">3</i></p>
#<i class="board-index board-index-8">8</i># <img data-src="http://p0.meituan.net/movie/99/678407.jpg@160w_220h_1e_1c" alt="龙猫" class="board-img" />#<p class="name"><a href="/films/123" title="龙猫" data-act="boarditem-click" data-val="{movieId:123}">龙猫</a></p># <p class="star">#<p class="releasetime">上映时间:1988-04-16(日本)</p>#<p class="score"><i class="integer">9.</i><i class="fraction">2</i></p>#匹配排序8,匹配图片、标题、主演、时间、评分def parse_one_page(html):pattern = re.compile('<dd>.*?board-index.*?>(\d+)</i>.*?data-src="(.*?)".*?name"><a'+'.*?>(.*?)</a>.*?star">(.*?)</p>.*?releasetime">(.*?)</p>'+'.*?integer">(.*?)</i>.*?fraction">(.*?)</i>.*?</dd>',re.S)#re.S表示匹配任意字符,若不加re.S则不能匹配换行符items = re.findall(pattern, html)print(items)
def main():url = 'http://maoyan.com/board/4?'html = get_one_page(url)parse_one_page(html)if __name__ == '__main__':main()
打印出来的结果:
def parse_one_page(html):pattern = re.compile('<dd>.*?board-index.*?>(\d+)</i>.*?data-src="(.*?)".*?name"><a'+'.*?>(.*?)</a>.*?star">(.*?)</p>.*?releasetime">(.*?)</p>'+'.*?integer">(.*?)</i>.*?fraction">(.*?)</i>.*?</dd>',re.S)#re.S表示匹配任意字符,若不加re.S则不能匹配换行符items = re.findall(pattern, html)for item in items:yield {'index':item[0],'image':item[1],'title':item[2],'actor':item[3].strip()[3:],# '\n主演:张国荣,张丰毅,巩俐\n'用.strip()去掉换行符,用切片去掉主演:三个字'time':item[4].strip()[5:],'score':item[5]+item[6]}def main():url = 'http://maoyan.com/board/4?'html = get_one_page(url)for item in parse_one_page(html):print(item)def write_to_file(content):with open('result.txt', 'a') as f:f.write(json.dumps(content) + '\n')#字典转换成字符串f.close()def main():url = 'http://maoyan.com/board/4?'html = get_one_page(url)for item in parse_one_page(html):print(item)write_to_file(item)路径在这:/Users/****/Documents/wangyiyun/result.txt 但都是unicode编码了,
def write_to_file(content):with open('result.txt', 'a',encoding = 'utf-8') as f:f.write(json.dumps(content,ensure_ascii = False) + '\n')#字典转换成字符串f.close()这样就好了if __name__ == '__main__':for i in range(10):main(i * 10)#构造offset=0,10,20...90pool = Pool()#构建进程池pool.map(main,[i * 10 for i in range(10)])#将主流的函数拿出来作为一个个参数,拿到线程池里面运行
多线程,可快啦!
阅读全文
0 0
- 天善智能网络爬虫学习~
- 网络爬虫学习2
- 学习网络爬虫
- 网络爬虫 学习1
- 网络爬虫 学习2
- Java学习: 网络爬虫
- 网络爬虫学习一
- python网络爬虫学习
- Python网络爬虫学习
- 网络爬虫 学习笔记
- 网络爬虫学习 python
- 搜索引擎学习之一:网络爬虫
- 网络爬虫学习(1)
- python网络爬虫学习笔记
- Python网络爬虫 学习资源----
- 网络爬虫学习笔记(一)
- Python网络爬虫基础知识学习
- Jsoup 网络爬虫 学习例子
- EffectiveC++学习笔记-条款28|29
- 【Linux学习】Linux上vi(vim)编辑器使用教程
- android 手势控制
- POJ Telephone Lines 二分+dijkstra
- android 手势检测
- 天善智能网络爬虫学习~
- c++一些博客
- npm和yarn
- HBase(二)hbase shell常用语法
- 怪异盒模型和标准盒模型
- jdbc
- 面向对象编程之类的继承性
- C++中new/delete和malloc/free的区别
- jquery动画