参考链接:https://www.makcyun.top/web_scraping_withpython3.html

该网页其实有16张图片,但是因为页面数据中某处多个空白,导致参考链接中的方式只有15张图片,并且亲测有些方式能用,有些方式不能用,特此记录一下

正常显示:

不正常显示:

#!/usr/bin/env python
# -*- coding: utf-8 -*- import random
import re import requests
from bs4 import BeautifulSoup
from lxml import etree
from pyquery import PyQuery as pq
from requests import RequestException headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:60.0) Gecko/20100101 Firefox/60.0'
} def get_one_page():
url = 'http://data.163.com/18/0901/01/DQJ3D0D9000181IU.html'
try:
response = requests.get(url, headers=headers)
if response.status_code == 200:
return response.text
except RequestException:
print('网页请求失败')
return None ### 如下是解析网页数据的5中方式 # 正则表达式
def parse_one_page1(html):
pattern = re.compile('<img alt=".*?租" src="(.*?)"', re.S)
items = re.findall(pattern, html)
for item in items:
yield {
'url': item
} # Xpath语法 # 使用这个('*//p//img[@alt = "房租"]/@src') 则结果只有15条,因为有个alt参数中房租前面有空格
def parse_one_page2(html):
parse = etree.HTML(html)
items = parse.xpath('*//img[@style="margin: 0px auto; display: block;" ]/@src')
for item in items:
yield {
'url': item
} # CSS选择器,结果有8条,还有待研究
def parse_one_page3(html):
soup = BeautifulSoup(html, 'lxml')
items = soup.select('p a img')
# print(items)
for item in items:
yield {
'url': item['src']
} # Beautiful Soup + find_all函数提取 结果有8条,还有待研究
def parse_one_page4(html):
soup = BeautifulSoup(html, 'lxml')
item = soup.find_all(attrs={'width': '100%', 'style': 'margin: 0px auto; display: block;'})
print(item)
for i in range(len(item)):
url = item[i].attrs['src']
yield {
'url': url
} # PyQuery
def parse_one_page5(html):
data = pq(html)
data2 = data('p>a>img')
for item in data2.items():
yield {
'url': item.attr('src')
} def download_thumb(url, name):
print(url, name)
try:
response = requests.get(url)
with open(name + '.jpg', 'wb') as f:
f.write(response.content)
except RequestException as e:
print(e)
pass def main():
html = get_one_page()
items = parse_one_page5(html)
for item in items:
# print(item['url'])
download_thumb(item['url'], str(random.randint(1, 1000))) if __name__ == '__main__':
main()

注:下载保存图片的函数还能再优化一下,不过懒得弄了,直接上随机数,哈哈

最新文章

  1. Cron表达式备忘
  2. Unity Assets目录下的特殊文件夹名称
  3. 测试简单for循环的效率
  4. Visual Studio的Web Performance Test提取规则详解(2)
  5. 通达信自动交易软件 z
  6. Servlet 是否线程安全 看完便知
  7. bt种子文件文件结构
  8. Agile methodology
  9. Microservice架构模
  10. maven_修改setting ,改为自己私服或者OSC开源中国 [为解决sqlite-jdbc 在中央仓库找不到]
  11. OC之类与对象
  12. tensorflow l2_loss函数
  13. 自学Zabbix3.5.4-监控项item-History and trends
  14. java学习笔记09-类与对象
  15. IntelliJ IDEA简介及简单操作
  16. js 实现数据结构 -- 栈
  17. redis的list取出数据方式速度测试
  18. linux-kernel-4.4 移植 (1)启动
  19. windows上安装Maven与Gradle
  20. Linq 之 Select 和 where 的用法

热门文章

  1. /usr/bin/ld: cannot find -lltdl collect2: ld returned 1 exit status make: *** [sapi/cgi/php-cgi] Err
  2. 支付宝即时到帐接口的python实现,演示样例採用django框架
  3. android Service not registered
  4. C# WINFORM 局域网PING 工具(技术改变世界-cnblog)
  5. hihocoder 1680 hiho字符串2 dp求方案数+递归
  6. scws
  7. 在redhat6上装1.8以下的docker
  8. wap 5.23 网测几道题目
  9. 如何正确从windows系统(自己电脑)远程访问Linux系统(他人电脑)的mysql数据库(图文详解)
  10. jquery插件之倒计时-团购秒杀